题目意思:有输入N在第一行,然后接下来的有N行,分别是N个人的糖果数,而且老师一吹口哨,每个人都给自己右边的人二分之一自己的糖果数,如果分后糖果数量为奇数,则老师在给他一颗糖,直到每人的糖果数相等为止,问:这样老师要吹多少次口哨,并且此时糖果数为多少?
思路:首先由题可知:a[1]=a[1]/2+a[n]/2;则a[i]=a[i]/2+a[i-1]/2;这样循环,(直到i==n)为止。
一下为AC代码:注意循环时啊a[i]不可直接与前后数字相除,而是要转化下,为吧a[i]=b[i]/2;这样不易出错,当你没把啊a[i].转化时,可能会出错,我当时就出错了,结果就是对不到答案!因此,,,
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int a[1001],b[1001];
int main()
{
int i,t,n;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int flag=1;int k=0;
while(1)
{
k++;
for(i=0;i<n;i++)//注意一下步骤!
{
b[i]=a[i]/2;//此处要注意!
}
for(i=1;i<n;i++)
{
a[i]=b[i]+b[i-1];
if(a[i]%2!=0)
a[i]++;
}
a[0]=b[0]+b[n-1];//不要漏掉第一个人,和最后一个人。
if(a[0]%2!=0)
a[0]++;//接下来寻找出是否全相等!
int t=a[0];
for(i=1;i<n;i++)//注意应该从第二个人开始!
if(t!=a[i])
{
flag=0;break;
}
if(flag)
{
printf("%d %d\n",k,t);
break;
}
else
flag=1;
}
}
return 0;
}