蓝桥杯2014年第五届真题-分糖果
题目描述
输入要求
输出要求
样例输入输出
解题思路:
采用函数式编程的思想,要解决问题应当有两个子操作:一个是要让每个小朋友将自己一半的糖果分给左手边的小朋友;另一个
是让老师给每次给奇数个糖果的小朋友再分一个糖果。循环上述两个操作,直到每个小朋友的糖果数相等为止,对应函数judge来判断。代码如下:
#include<bits/stdc++.h>
using namespace std;
#define maxn 105
int a[maxn];
int b[maxn];
int N;
int flag=0;
int judge() { //该函数用于判断每个小朋友的糖果是否相等
for(int i=1; i<N; i++)
if(a[0]!=a[i]) return 1;//并不是每个元素都相等
return 0;//每个元素相等
}
void allocate() { //该函数用于老师给每个奇数糖果的小朋友再分一个糖果
for(int i=0; i<N; i++)
if(a[i]%2==1) {
a[i]++;
flag++;
}
}
int main() {
memset(a,0,sizeof a);
memset(b,0,sizeof b);
cin>>N;
for(int i=0; i<N; i++) {
cin>>a[i];
b[i]=a[i];
}
while(judge()) {
for(int i=0; i<N; i++) {
a[i]/=2;
a[i]+=b[(i+N+1)%N]/2;
}
allocate();
for(int i=0; i<N; i++) //每次结束以后要对B进行相应的更新
b[i]=a[i];
}
cout<<flag;
return 0;
}
总结:这道题解题思路很清晰,题面已经将两个具体操作给出,关键在于具体实现的时候,代码中的一些细节问题。