solution.md 4.2 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1
# 分糖果
F
fix bug  
feilong 已提交
2

3
**问题描述**
F
fix bug  
feilong 已提交
4

每日一练社区's avatar
每日一练社区 已提交
5 6 7 8 9 10
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。

11
**输入格式**
F
fix bug  
feilong 已提交
12

每日一练社区's avatar
每日一练社区 已提交
13 14 15
程序首先读入一个整数N(2<N<100),表示小朋友的人数。   
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)

16
**输出格式**
F
fix bug  
feilong 已提交
17

每日一练社区's avatar
每日一练社区 已提交
18 19
要求程序输出一个整数,表示老师需要补发的糖果数。

20
**样例输入**
F
fix bug  
feilong 已提交
21

每日一练社区's avatar
每日一练社区 已提交
22 23 24 25
```
3
2 2 4
```
26
**样例输出**
F
fix bug  
feilong 已提交
27

每日一练社区's avatar
每日一练社区 已提交
28 29 30 31
```
4
```

每日一练社区's avatar
每日一练社区 已提交
32
以下<span style="color:red">错误</span>的一项是?
每日一练社区's avatar
每日一练社区 已提交
33

每日一练社区's avatar
每日一练社区 已提交
34
## aop
F
fix bug  
feilong 已提交
35

每日一练社区's avatar
每日一练社区 已提交
36
### before
F
fix bug  
feilong 已提交
37

每日一练社区's avatar
每日一练社区 已提交
38
```cpp
每日一练社区's avatar
每日一练社区 已提交
39
#include <bits/stdc++.h>
每日一练社区's avatar
每日一练社区 已提交
40 41
using namespace std;
```
每日一练社区's avatar
每日一练社区 已提交
42

每日一练社区's avatar
每日一练社区 已提交
43
### after
F
fix bug  
feilong 已提交
44

每日一练社区's avatar
每日一练社区 已提交
45 46 47 48 49
```cpp

```

## 答案
F
fix bug  
feilong 已提交
50

每日一练社区's avatar
每日一练社区 已提交
51 52 53 54 55
```cpp
int main()
{
    int n;
    cin >> n;
每日一练社区's avatar
每日一练社区 已提交
56 57 58 59 60 61
    int a[n], tmp[n];
    for (int i = 0; i < n; ++i)
        cin >> a[i];
    int cnt = 0, t;
    bool f = true;
    while (true)
每日一练社区's avatar
每日一练社区 已提交
62
    {
每日一练社区's avatar
每日一练社区 已提交
63 64 65
        f = true;
        for (int i = 1; i < n; ++i)
            if (a[0] != a[i])
每日一练社区's avatar
每日一练社区 已提交
66
            {
每日一练社区's avatar
每日一练社区 已提交
67
                f = false;
每日一练社区's avatar
每日一练社区 已提交
68 69
                break;
            }
每日一练社区's avatar
每日一练社区 已提交
70
        if (f)
每日一练社区's avatar
每日一练社区 已提交
71
            break;
每日一练社区's avatar
每日一练社区 已提交
72 73 74 75

        for (int i = 0; i < n; ++i)
            a[i] = tmp[i] = a[i] >> 1;
        for (int i = 0; i < n; ++i)
每日一练社区's avatar
每日一练社区 已提交
76
        {
每日一练社区's avatar
每日一练社区 已提交
77 78 79 80
            t = (i - 1 + n) % n;
            a[t] += tmp[i];
            if (a[t] && 1)
                ++a[t], ++cnt;
每日一练社区's avatar
每日一练社区 已提交
81 82
        }
    }
每日一练社区's avatar
每日一练社区 已提交
83 84
    cout << cnt;
    return 0;
每日一练社区's avatar
每日一练社区 已提交
85 86 87 88
}
```
## 选项

F
fix bug  
feilong 已提交
89

每日一练社区's avatar
每日一练社区 已提交
90
### A
F
fix bug  
feilong 已提交
91

每日一练社区's avatar
每日一练社区 已提交
92 93 94
```cpp
int main()
{
每日一练社区's avatar
每日一练社区 已提交
95
    int n, m, count = 0, t = 0;
每日一练社区's avatar
每日一练社区 已提交
96
    cin >> n;
每日一练社区's avatar
每日一练社区 已提交
97
    vector<int> v;
每日一练社区's avatar
每日一练社区 已提交
98 99
    for (int i = 0; i < n; i++)
    {
每日一练社区's avatar
每日一练社区 已提交
100 101
        cin >> m;
        v.push_back(m);
每日一练社区's avatar
每日一练社区 已提交
102 103 104
    }
    while (1)
    {
每日一练社区's avatar
每日一练社区 已提交
105

每日一练社区's avatar
每日一练社区 已提交
106
        bool flag = true;
每日一练社区's avatar
每日一练社区 已提交
107
        for (int i = 0; i < n; i++)
每日一练社区's avatar
每日一练社区 已提交
108
        {
每日一练社区's avatar
每日一练社区 已提交
109
            if (v[0] != v[i])
每日一练社区's avatar
每日一练社区 已提交
110 111
                flag = false;
        }
每日一练社区's avatar
每日一练社区 已提交
112
        if (flag)
每日一练社区's avatar
每日一练社区 已提交
113
            break;
每日一练社区's avatar
每日一练社区 已提交
114
        for (int i = 0; i < n; i++)
每日一练社区's avatar
每日一练社区 已提交
115
        {
每日一练社区's avatar
每日一练社区 已提交
116 117 118 119 120 121 122 123 124 125 126 127
            v[i] = v[i] / 2;
        }
        int temp = v[n - 1];
        for (int i = n - 1; i > 0; i--)
        {
            v[i] += v[i - 1];
        }
        v[0] += temp;
        for (int i = 0; i < n; i++)
        {

            if (v[i] & 1)
每日一练社区's avatar
每日一练社区 已提交
128
            {
每日一练社区's avatar
每日一练社区 已提交
129 130
                v[i]++;
                count++;
每日一练社区's avatar
每日一练社区 已提交
131 132 133
            }
        }
    }
每日一练社区's avatar
每日一练社区 已提交
134 135
    cout << count << endl;
    return 0;
每日一练社区's avatar
每日一练社区 已提交
136 137 138 139
}
```

### B
F
fix bug  
feilong 已提交
140

每日一练社区's avatar
每日一练社区 已提交
141
```cpp
每日一练社区's avatar
每日一练社区 已提交
142 143
int n;
int a[100];
每日一练社区's avatar
每日一练社区 已提交
144 145
int main()
{
每日一练社区's avatar
每日一练社区 已提交
146
    bool flag;
每日一练社区's avatar
每日一练社区 已提交
147
    cin >> n;
每日一练社区's avatar
每日一练社区 已提交
148
    for (int i = 1; i <= n; i++)
每日一练社区's avatar
每日一练社区 已提交
149
    {
每日一练社区's avatar
每日一练社区 已提交
150
        cin >> a[i];
每日一练社区's avatar
每日一练社区 已提交
151
    }
每日一练社区's avatar
每日一练社区 已提交
152 153 154
    int nAns = 0;
    int temp;
    while (true)
每日一练社区's avatar
每日一练社区 已提交
155
    {
每日一练社区's avatar
每日一练社区 已提交
156
        for (int i = 1; i <= n; i++)
每日一练社区's avatar
每日一练社区 已提交
157
        {
每日一练社区's avatar
每日一练社区 已提交
158
            if (1 == i)
每日一练社区's avatar
每日一练社区 已提交
159
            {
每日一练社区's avatar
每日一练社区 已提交
160 161 162 163 164 165 166
                temp = a[i] / 2;
                a[i] -= temp;
            }
            else
            {
                a[i - 1] += a[i] / 2;
                a[i] -= a[i] / 2;
每日一练社区's avatar
每日一练社区 已提交
167 168
            }
        }
每日一练社区's avatar
每日一练社区 已提交
169 170
        a[n] += temp;
        for (int i = 1; i <= n; i++)
每日一练社区's avatar
每日一练社区 已提交
171
        {
每日一练社区's avatar
每日一练社区 已提交
172
            if (a[i] % 2 == 1)
每日一练社区's avatar
每日一练社区 已提交
173
            {
每日一练社区's avatar
每日一练社区 已提交
174 175
                a[i] += 1;
                nAns++;
每日一练社区's avatar
每日一练社区 已提交
176
            }
每日一练社区's avatar
每日一练社区 已提交
177 178 179 180 181
        }
        flag = true;
        for (int i = 1; i < n; i++)
        {
            if (a[i] != a[i + 1])
每日一练社区's avatar
每日一练社区 已提交
182
            {
每日一练社区's avatar
每日一练社区 已提交
183
                flag = false;
每日一练社区's avatar
每日一练社区 已提交
184 185
            }
        }
每日一练社区's avatar
每日一练社区 已提交
186 187 188 189
        if (flag == true)
        {
            break;
        }
每日一练社区's avatar
每日一练社区 已提交
190
    }
每日一练社区's avatar
每日一练社区 已提交
191 192
    cout << nAns << endl;
    return 0;
每日一练社区's avatar
每日一练社区 已提交
193 194 195 196
}
```

### C
F
fix bug  
feilong 已提交
197

每日一练社区's avatar
每日一练社区 已提交
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
```cpp
int main()
{
    int n;
    cin >> n;
    int *Candy = new int[n];
    for (int i = 0; i < n; i++)
    {
        cin >> Candy[i];
    }
    int total = 0;
    while (1)
    {
        bool flag = true;
        for (int i = 1; i < n; i++)
        {
            if (Candy[0] != Candy[i])
            {
                flag = false;
                break;
            }
        }
        if (flag == true)
            break;
        int temp = Candy[n - 1];
        for (int i = n - 1; i >= 0; i--)
        {
            if (i == 0)
            {
                Candy[0] = Candy[0] / 2 + temp / 2;
            }
            else
                Candy[i] = Candy[i] / 2 + Candy[i - 1] / 2;
每日一练社区's avatar
每日一练社区 已提交
231
            if (Candy[i] % 2 != 0)
每日一练社区's avatar
每日一练社区 已提交
232 233 234 235 236 237 238 239 240
            {
                Candy[i] += 1;
                total += 1;
            }
        }
    }
    cout << total << endl;
}
```