均分纸牌
均分纸牌
题意
把给定的纸牌均匀分配成相同的数目,问最少需要几次步骤实现(注意第一个只能往第二个分,最后一个只能往前一个分)
思路
- 多列几个例子发现主要判断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;
}