首页 > 代码库 > hdu1034 简单模拟
hdu1034 简单模拟
这里开一个二维数组,num[105][2]; 我也不知道N有多少,随便开的, 那么这里num[i][0] 表示当前 第 i 个人拥有的糖果数,num[i][1]表示他上面一个人分给他的糖果数,具体实现见代码注释
这里要注意的就是:先给糖果,然后如果有人糖果数为奇数,就加1 ,然后再判断是不是相等
上马:
#include <iostream> #include <cstring> using namespace std; int num[105][2]; int N; bool end()//判断是否end过程中,处理分糖果 { bool flag = true;//是否end for(int i = 0; i < N; i ++) { num[i][0] = num[i][0] + num[i][1]; //先处理 if(num[i][0] % 2 != 0) num[i][0] ++;//奇数就加1 } for(int i = 0; i < N-1; i ++) { if(num[i][0] != num[i+1][0]) flag = false;//两两中相等就都相等 } return flag; } int main() { while(cin >> N && N) { memset(num,0,sizeof(num)); for(int i = 0; i < N; i ++) cin >> num[i][0]; int time = 0;//次数 while(1) { if(end()) break; time ++; for(int i = 0; i < N; i ++)//循环处理 { int right = (i+1)%N; //这里表示下一个人 num[right][1] = num[i][0] / 2; num[i][0] = num[i][0]/2; } } cout << time << ' ' << num[0][0]<<endl; } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。