分糖果 蓝桥杯
2016-03-17 11:29
399 查看
问题描述
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
程序首先读入一个整数N(2<N<100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3
2 2 4
样例输出
4
思路
根据题意,比较短路的采用模拟的算法。
数据结构:N个大小的int数组
算法:
children[i]/2 children[(i+1)%N]+=children/2
相等标志=true
遍历,遇到奇数则其+1,计数器+1,偶数不变。
和第一个数比较,相等标志值遇到不同变false。
until(!相等标志值)
输出:计数器
误区:分一半是指原来的数目的一半,而不是接受了右手边的再分。否则,可能出现奇数就没办法分一半了。比如2 2 4 -> 1 3 4。
应该先都分一半,再一次性加上。2 2 4 -> 1 1 2。或者让最后一个孩子先分,但不给出去,然后这个孩子之前的人分给他,直到最后再将他的分给第一个人。
代码
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
程序首先读入一个整数N(2<N<100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3
2 2 4
样例输出
4
思路
根据题意,比较短路的采用模拟的算法。
数据结构:N个大小的int数组
算法:
children[i]/2 children[(i+1)%N]+=children/2
相等标志=true
遍历,遇到奇数则其+1,计数器+1,偶数不变。
和第一个数比较,相等标志值遇到不同变false。
until(!相等标志值)
输出:计数器
误区:分一半是指原来的数目的一半,而不是接受了右手边的再分。否则,可能出现奇数就没办法分一半了。比如2 2 4 -> 1 3 4。
应该先都分一半,再一次性加上。2 2 4 -> 1 1 2。或者让最后一个孩子先分,但不给出去,然后这个孩子之前的人分给他,直到最后再将他的分给第一个人。
代码
#include<iostream> using namespace std; int main(){ int N; cin >> N; int *child = new int ; for(int i=0;i<N;++i){ cin >> child[i]; } int candys = 0,i,temp; bool isEq = false; while(!isEq){ // divide candy for(i=N-1;i>=0;--i){ if(i == (N-1)){ temp = child[i]/2; child[i] = temp; }else{ child[i]/=2; child[i+1]+=child[i]; } } child[0] += temp; isEq = true; // send candy for(i=0;i<N && isEq;++i){ if(child[i]%2==1){ child[i] += 1; candys += 1; } } for(i=0;i<N && isEq;++i){ if(child[i] != child[0]){ isEq = false; } } } cout << candys; delete child; return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性