的一半,实在想不出啥好办法来表示改变后的糖果数量,所以就只好开了两个动态数组,一个保存改变前,一个保存改变后;当然一次改变完成后记得将改变后的数组赋值为改变前的;不能简单的new一个动态数组,然后直接p=q,这样两个指针指向的是同一个数组,就不能达到一个保存改变前,一个保存改变后的目的;
```cpp
#include<iostream>
using namespace std;
int ifsame(int *p, int n) {//判断糖果数是否都相等
for (int i = 0; i < n - 1; i++) {
if (p[i] != p[i + 1]) {
return 0;
break;
}
}
return 1;
}
int main() {
int N, k,i;
while (cin >> N && N != 0) {
k = 0;
int *p = new int[N];
int *q = new int[N];
for (i = 0; i < N; i++) {
cin >> p[i];
q[i] = p[i];//保存改变前的糖果数量
}
while (!ifsame(p, N)) {
for (i = 1; i < N; i++) {
p[i] = p[i] / 2 + q[i - 1] / 2;
}
p[0] = p[0] / 2 + q[N - 1] / 2;
for (i = 0; i < N; i++) {
if (p[i] % 2) //奇数个加一
p[i] += 1;
q[i] = p[i];//将当前改变后的数量赋值为下一次改变的初始量
}
k++;
}
cout << k << " " << p[0] << endl;
delete[]p, delete[]q;//记得删除
}
return 0;
}
HDU1034C++
最新推荐文章于 2021-10-23 19:39:27 发布