poj 1666 : Candy Sharing Game (模拟)

来源:互联网 发布:淘宝店女装退货率30 编辑:程序博客网 时间:2024/04/30 14:52

题意:

       stu个孩子(每人手里拿着偶数个糖果)围成一个圈面向老师,老师站在学生中间,老师每一次吹哨子,每个学生就把手里的糖果的一半分给右边的同伴(若分后学生手里的糖果数是奇数,老老师会再给学生一颗,凑成偶数),直到每个学生手里的糖果数目一样为止。求最后吹哨子的次数,学生的糖果数。

思路:模拟。

代码如下:

#include<iostream>using namespace std;const int Max=100;int main(){int stu,i,candy[Max],give[Max];while(cin>>stu && stu!=0){for(i=0;i<stu;i++)cin>>candy[i];int tim=0;while(1){bool flag=false;for(i=0;i<stu;i++)           //看是否符合结束条件if(candy[i]!=candy[0]){flag=true;break;}if(!flag)break;tim++;for(i=0;i<stu;i++)   //开始模拟糖果传递的过程give[i]=candy[i]/2;candy[stu-1]=candy[stu-1]/2+give[0]; //要注意最后一个和第一个之间的传递if(candy[stu-1]%2==1)    candy[stu-1]++;for(i=0;i<stu-1;i++)   //其他学生间的传递{candy[i]=candy[i]/2+give[i+1];if(candy[i]%2==1)candy[i]++;}}cout<<tim<<' '<<candy[0]<<endl;}return 0;}


原创粉丝点击