答案是移动9次,但我怎么检查最低移动5次就行了,蒟蒻不解,下面为自测代码。大佬运行看看这样移动是不是只需要5次且合法。
#include<iostream>
using namespace std;
int n,a[101];
int main(){
int sum=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
}
int ans=0;
sum/=n;
for(int i=1;i<=n;i++){
bool t=0;
for(int j=1;j<=n;j++){
if(a[j]!=sum){
t=1;
break;
}
}
if(!t){
cout<<endl<<"答案:"<<ans<<endl;
return 0;
}
int max=-1,maxs,min=10001,mins;
for(int j=1;j<=n;j++){
if(a[j]>max){
max=a[j];
maxs=j;
}
}
for(int j=1;j<=n;j++){
if(a[j]<min){
min=a[j];
mins=j;
}
}
int jdm1=max-sum;
int jdm2=sum-min;
if(jdm1<jdm2){
a[maxs]-=jdm1;
a[mins]+=jdm1;
}else{
a[mins]+=jdm2;
a[maxs]-=jdm2;
}
cout<<endl;
cout<<"对上面数据做操作:"<<"最大:"<<max<<" 位置:"<<maxs<<" 最小:"<<min<<" 位置:"<<mins<<endl<<"最大移到最小"<<endl<<"移动"<<max-sum<<"张" ;
for(int j=1;j<=n;j++) cout<<a[j]<<' ';
ans++;
}
}