问题 1431: [蓝桥杯][2014年第五届真题]分糖果 ——思维+模拟

  • Post author:
  • Post category:其他


10分钟写完了代码,提交了三次全部超时,检查了也没发现死循环,把错误代码放上,眼睛疼,明天再改。

题目描述

问题描述

有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:

每个小朋友都把自己的糖果分一半给左手边的孩子。

一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。

反复进行这个游戏,直到所有小朋友的糖果数都相同为止。

你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。

输入

程序首先读入一个整数N(2< N< 100),表示小朋友的人数。

接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)

输出

要求程序输出一个整数,表示老师需要补发的糖果数。

样例输入

3

2 2 4

样例输出

4

代码:

#include < iostream>

#include < algorithm>

using namespace std;

int sum=0,y=1;

int main()

{


int n;

cin>>n;

int a[n],b[n];

for(int i=0;i<n;i++)

{


cin>>a[i];

b[i]=a[i]/2;

}

while(1)

{


for(int i=1;i<n;i++)

{


if(a[0]!=a[i])

{


y=0;

break;

}

}

if(y==1)

{


break;

}

for(int i=1;i<n;i++)

{


a[i]=a[i]/2+b[i-1];

}

a[0]=a[0]/2+b[n-1];

for(int j=0;j<n;j++)

{


if(a[j]%2!=0)

{


sum++;

a[j]++;

}

}

}

return 0;

}



版权声明:本文为weixin_45387338原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。