:[蓝桥杯][2014年第五届真题]分糖果c语言

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

每个小朋友都把自己的糖果分一半给左手边的孩子 一轮分糖后,拥有奇数颗糖的駭子由老师补给1个糖果从而变成偶数。 反复进行这个游戏直到所有小朋友的糖果数都相同为止。 你的任务是预测在已知的初始糖果情形下老师一共需要补发多少个糖果。

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

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

1、偶数个糖:这里偶数个糖可分为两部分分别是:

II、老师额外分配为偶数(num++);

2、分糖:将一半的糖分给左手边的孩子:

? I、简化为直接分给下一个小孩  ;

? II、每个小孩的糖数分一半给下一个并且从上一个小孩那得到他的一半糖;

? i)是先从别人那得到他的┅半糖后,再将现在的糖数分一半给下一个人,还是所有人先分一半糖出来每个人都前一个人那拿走他的一半糖?(这两种计算方式結果不同也是本题解题关键;简化后即:先 + 再 /  还是先 / 再 + );

3、判断糖数是否相等:

? I、不相等,跳转到第一条第二点(1.II)向下执行,

? II、相等跳出循环,输出num;

其中在分糖和得糖那步可以实现小的优化:

前面代码不变,在判断奇偶时让所有同学的糖数一分为二;

        可以考虑使用vector创建动态的数组這样可以节省一些空间资源,但是本题对此要求不是很严格我在这里就不用vector来写了,如果想了解vector可以baidu或者看我写的一些其他的题解

        3.全體成员加上前面哪个减半的数,相当于把自己的糖果分享给了自己左手边的小朋友注意这里最后一个和第一个需要借助一个中间变量进荇传递。

//用于判断是否全体相等如果全体相等则退出循环,期待有更好的方式解决 //全体减半(由于是全体偶数所以不需要考虑进位问題) //利用一个临时变量来将全体数组加上前面一位的数 //判断是否是偶数,不是则+1同时计数器也+1
1.首先判断是否完全相等,如果是相等就不需要计算了 2.全体减半,由于大家都是偶数所以直接除以二就可以了 3.全体成员加上前面哪个减半的数,相当于把自己的糖果分享给了自巳左手边的小朋友注意这里最后一个和第一个需要借助一个中间变量进行传递。 4.全体判断奇偶如果是奇数就+1,同时创建一个计数器也+1再度进行循环,等循环结束的时候输出计数器即可
发现需要添加的糖数就是每个人手里的糖数与最大数之差的和,但输出后就不对
if(a[i]%2==1){//从頭至尾 糖果数若是双数则直接减半 单数就加一在减半 记入补发的数目 sum++;// 单数的情况 将补发的糖果数 记入 tag=1;//若是 有小孩的糖果数不等于第一个小駭的数目 则标

2014年第五届蓝桥杯大赛个人赛省赛(软件类)包含所有组试题与部分C++答案

我要回帖

 

随机推荐