原代码:
#include<iostream>
using namespace std;
int main()
{
int arr[5];
for (int i = 0; i < 5; i++)
{
cin >> arr[i];
}
int sum = 0;
//int a, b, c, d, e;
int out = 0;
for (int i = 0; i < 5; i++)
{
out = arr[i] / 3;
sum = sum + arr[i] - 3 * out;
arr[i] = out;
if (i == 0)
{
arr[4] = arr[4] + out;
arr[1] = arr[1] + out;
}
else if (i == 4)
{
arr[0] = arr[0] + out;
arr[3] = arr[3] + out;
}
else
{
arr[i - 1] = arr[i - 1] + out;
arr[i + 1] = arr[i + 1] + out;
}
}
for (int i = 0; i < 4; i++)
{
cout << arr[i] << " ";
}
cout << arr[4] << endl;
cout << sum;
return 0;
}
原代码是特殊对待第一个和最后一个人
改进后:
#include<iostream>
using namespace std;
int main()
{
int arr[5];
for (int i = 0; i < 5; i++)
{
cin >> arr[i];
}
int sum = 0;
//int a, b, c, d, e;
int out = 0;
for (int i = 0; i < 5; i++)
{
out = arr[i] / 3;
sum = sum + arr[i] - 3 * out;
arr[i] = out;
if ((i - 1) < 0)
{
arr[(i + 4) % 5] = arr[(i + 4) % 5] + out;
}
else
{
arr[(i - 1) % 5] = arr[(i - 1) % 5] + out;
}
arr[(i + 1) % 5] = arr[(i + 1) % 5] + out;
}
for (int i = 0; i < 4; i++)
{
cout << arr[i] << " ";
}
cout << arr[4] << endl;
cout << sum;
return 0;
}
用取余运算符%来表示第一个和最后一个的时候的特殊情况
-1 mod 5 = 4,但是 -1 % 5 = -1,而arr数组没有附属的项,所以改为 (i + 4)% 5 来代替。