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

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

每日一练社区's avatar
每日一练社区 已提交
5
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每日一练社区's avatar
每日一练社区 已提交
6

每日一练社区's avatar
每日一练社区 已提交
7
每个小朋友都把自己的糖果分一半给左手边的孩子。
每日一练社区's avatar
每日一练社区 已提交
8

每日一练社区's avatar
每日一练社区 已提交
9
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
每日一练社区's avatar
每日一练社区 已提交
10

每日一练社区's avatar
每日一练社区 已提交
11
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
每日一练社区's avatar
每日一练社区 已提交
12

每日一练社区's avatar
每日一练社区 已提交
13 14
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。

15
**输入格式**
F
fix bug  
feilong 已提交
16

每日一练社区's avatar
每日一练社区 已提交
17
程序首先读入一个整数N(2<N<100),表示小朋友的人数。   
每日一练社区's avatar
每日一练社区 已提交
18

每日一练社区's avatar
每日一练社区 已提交
19 20
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)

21
**输出格式**
F
fix bug  
feilong 已提交
22

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

25
**样例输入**
F
fix bug  
feilong 已提交
26

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

32
**样例输出**
F
fix bug  
feilong 已提交
33

每日一练社区's avatar
每日一练社区 已提交
34 35 36 37
```
4
```

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

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

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

每日一练社区's avatar
每日一练社区 已提交
44
```cpp
每日一练社区's avatar
每日一练社区 已提交
45
#include <bits/stdc++.h>
每日一练社区's avatar
每日一练社区 已提交
46 47
using namespace std;
```
每日一练社区's avatar
每日一练社区 已提交
48

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

每日一练社区's avatar
每日一练社区 已提交
51 52 53 54 55
```cpp

```

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

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

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

F
fix bug  
feilong 已提交
95

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

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

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

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

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

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

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