均分纸牌
题意
把给定的纸牌均匀分配成相同的数目,问最少需要几次步骤实现(注意第一个只能往第二个分,最后一个只能往前一个分)
思路
- 多列几个例子发现主要判断a[i]是否与平均数相等,所以按这个条件写出代码
坑点
1.第一次if后加continue,确保代码运行完整
算法一:for循环
时间复杂度
省级–
实现步骤
- 先求出平均数,因为最后n个数都会变成平均数
- 通过for循环判断a[i]是否等于平均数,如果不等于次数加一
代码
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
int a[10009];//每堆纸牌初始纸牌数
for(int i=0;i<n;i++){
cin>>a[i];
}
int pjs=0;
int sum=0;
for(int i=0;i<n;i++){//求平均数
sum+=a[i];
}
pjs=sum/n;
int count=0;
for(int i=0;i<n;i++){
a[i]-=pjs;
if(a[i]==0){
continue;
}
else{
a[i+1]+=a[i];
count++;
}
}
cout<<count;
return 0;
}