有n个小朋友站成一排(编号从0到n-1),每个小朋友有一个rating值,存放在ratings数组中。老师需要给他们分配糖果,每个小朋友至少需要一颗糖果,对于任意相邻的两个小朋友i和i+1,rating值大的必须比rating值小的分配的糖果多(rating相同的没必要分配一样多的糖果)。
请计算最少需要多少颗糖果,才能完成上述分配。
输入格式:
多组数据,每组数据第一行是一个正整数n。
接下来n行,每行有1个正整数,表示每个小朋友的rating值。所有整数都不超过100000。
输出格式:
每组数据一行,包括一个正整数,表示做少需要的糖果数。
#include<stdio.h>
int main(){
int n,a[110];
int i;
int temp;
int count=0;//记录添加的糖果数量
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
while(1){
//判断每个人的糖果数量是否相等
for(i=1;i<n;i++){
if(a[i]!=a[0])
break;
}
//循环的出口
if(i==n)
break;
//开始分糖果
temp=a[0];
for(i=0;i<n-1;i++){
a[i]=(a[i]+a[i+1])/2;
}
a[i]=(a[i]+temp)/2;
//开始老师补糖果
for(i=0;i<n;i++){
if(a[i]%2!=0){
a[i]++;
count++;
}
}
}
printf("%d\n",count);
return 0;
}