A94673题解
2025-12-28 09:06:12
发布于:上海
18阅读
0回复
0点赞
具体思路看注释:
#include<bits/stdc++.h>
using namespace std;
int n,a[110];
bool fl=1;//用于判断是否继续循环
bool x(){
for(int i=1;i<=n;i++)if(a[i]!=0)return 1;//用于判断数组是否是全部非零
return 0;
}int main(){
int cnt=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}for(int i=1;i<=n;i++){
if(a[i]==1){//特判(当时没想出来怎么写,写了个特判给我12.5)
int sum=0;
for(int i=1;i<=n;i++){
sum+=a[i];
}cout<<sum;
return 0;
}
}
while(fl){
int M=-1,m=999;//由于要找最大数和最小数,所以最大数弄个-1,最小弄个999已经足够了
for(int i=1;i<=n;i++){
M=max(M,a[i]);//找出最大数
}for(int i=1;i<=n;i++){
if(a[i]!=0)m=min(m,a[i]);//找最小数
}for(int i=n;i>=1;i--){
if(a[i]==M){
a[i]-=m;//相减
break;//当时这个break卡我好久,样例一代一直输出4,才知道不加break直接一整个数组全减了
}
}cnt++;//增加次数
fl=x();//判断是否要继续循环
}cout<<cnt;
return 0;
}
这里空空如也







有帮助,赞一个