Wa #3
查看原帖
Wa #3
773816
Over_fame楼主2022/9/9 22:21

答案是移动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++;
	}
} 
2022/9/9 22:21
加载中...