解题思路:
不就是向左传递一半糖块,算一下需要多少糖块进行填充么
注意事项:思考我为什么在while循环中两次进行向左传递糖果函数
参考代码:
#include<cstdio> using namespace std; int an[105],n,nu=-1,num=0; void xh()//向左传递糖果的函数 { int b=an[1]; for(int i=1;i<n;i++) { an[i]=(an[i]+an[i+1])/2; } an[n]=(an[n]+b)/2; } void numn()//计算需要填充的糖果数目,并填充糖果数目为偶数的函数 { for(int i=1;i<=n;i++) if(an[i]%2!=0) { an[i]++; num++; } } int main () { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&an[i]); while(nu!=num) //当填充糖果数不变时就为糖果数目相同时(技巧处) { xh(); numn(); nu=num; xh(); numn(); } printf("%d",num); return 0; }
0.0分
3 人评分