求和法
2026-07-20 15:03:53
发布于:湖北
14阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int a[110],sum = 0,n, ans=0;
int main(){
cin>>n;
//填充数组
for(int i=1;i<=n;i++) {
cin>>a[i];
sum+=a[i];
}
//开始清0
while(true){
if(sum==0) break;
//1.第一步: 找到a数组中的最大值和最小值
int maxn = -1, minn = 1e9, max_pos;
for(int i=1;i<=n;i++){//遍历数组
if(a[i]>maxn && a[i]!=0) {
maxn = a[i];
max_pos = i; //记录最大数的位置
}
if(a[i]<minn && a[i]!=0) {
minn = a[i];
}
}
a[max_pos]-=minn;
sum-=minn;
ans++; //操作次数自增1次
}
cout<<ans; //操作的次数
return 0;
}
/*
输入:
3
2 3 4 sum = 9
输出: maxn minn
1. 4 2 2 3 2 sum = 7
2. 3 2 2 1 2
3. 2 1 2 1 1
4. 2 1 1 1 1
5. 1 1 1 1 0
6. 1 1 1 0 0
7. 1 1 0 0 0 sum = 0
*/
这里空空如也



有帮助,赞一个