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 42
using namespace std;
```
### after
F
fix bug  
feilong 已提交
43

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

```

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

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

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

F
fix bug  
feilong 已提交
88

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

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

每日一练社区's avatar
每日一练社区 已提交
105
        bool flag = true;
每日一练社区's avatar
每日一练社区 已提交
106
        for (int i = 0; i < n; i++)
每日一练社区's avatar
每日一练社区 已提交
107
        {
每日一练社区's avatar
每日一练社区 已提交
108
            if (v[0] != v[i])
每日一练社区's avatar
每日一练社区 已提交
109 110
                flag = false;
        }
每日一练社区's avatar
每日一练社区 已提交
111
        if (flag)
每日一练社区's avatar
每日一练社区 已提交
112
            break;
每日一练社区's avatar
每日一练社区 已提交
113
        for (int i = 0; i < n; i++)
每日一练社区's avatar
每日一练社区 已提交
114
        {
每日一练社区's avatar
每日一练社区 已提交
115 116 117 118 119 120 121 122 123 124 125 126
            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
每日一练社区 已提交
127
            {
每日一练社区's avatar
每日一练社区 已提交
128 129
                v[i]++;
                count++;
每日一练社区's avatar
每日一练社区 已提交
130 131 132
            }
        }
    }
每日一练社区's avatar
每日一练社区 已提交
133 134
    cout << count << endl;
    return 0;
每日一练社区's avatar
每日一练社区 已提交
135 136 137 138
}
```

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

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

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

每日一练社区's avatar
每日一练社区 已提交
197 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
```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
每日一练社区 已提交
230
            if (Candy[i] % 2 != 0)
每日一练社区's avatar
每日一练社区 已提交
231 232 233 234 235 236 237 238 239
            {
                Candy[i] += 1;
                total += 1;
            }
        }
    }
    cout << total << endl;
}
```