本题比较基础,创建数组存储所有人的糖果数,如果所有人的糖果数不相等,则交换,直到所有人糖果数相等。
每次交换都是获得前面一个人的一半糖果(本次交换前的数量),交换后如果糖果数为奇数,则加1。
#include <iostream>
using namespace std;
int main()
{
int N;
bool flag = false; //所有人糖果是否相等
int number; //交换次数
while (cin >> N)
{
if (N == 0)
break;
int* num = new int[N + 1];
int* temp = new int[N + 1];
memset(num, 0, sizeof(num));
memset(temp, 0, sizeof(temp));
number = 0; //每次输入新的测试用例要重置
flag = false; //每次输入新的测试用例要重置
for (int i = 1; i <= N; i++)
cin >> num[i];
while (flag == false)
{
flag = true;
for (int i = 1; i < N; i++) //判断所有人的糖果数是否相等
{
if (num[i] != num[i + 1])
{
flag = false;
break;
}
}
if (flag == true)
break;
++number;
for (int i = 1; i <= N; i++) //交换糖果
{
temp[i] = num[i]; //每个人的糖果数量更新前保存原值
if (i == 1)
{
num[i] = num[i] / 2 + num[N] / 2;
}
else
{
num[i] = num[i] / 2 + temp[i - 1] / 2;
}
}
for (int i = 1; i <= N; i++) //如果糖果数为奇数则获得一个糖果
{
if (num[i] % 2 == 1)
++num[i];
}
}
cout << number << " " << num[1] << endl;
}
return 0;
}
继续加油。