大佬求教
查看原帖
大佬求教
421060
悠远的苍穹楼主2024/11/27 21:29

代码思路我想的是每一堆纸牌从前往后只会给予和索要,所以只要按照平均数从前往后总和少了就索要,多了就给予,看题解思路也差不多是这样,但为什么我这样做过不了啊,求大佬指教

#include<iostream>
#include<cstdio>
using namespace std;
int tip[105];
int main(){
	int n;
	scanf("%d",&n);
	int ant = 0; 
	for(int i=1;i<=n;i++){
		scanf("%d",&tip[i]);
		ant+=tip[i];
	}
	int avg = ant/n;
	int amt = 0,sum = 0;
	for(int i=1;i<=n;i++){
		if(tip[i]<avg){
			if(sum-avg+tip[i]>0){
				amt+=1;
				sum=sum-avg+tip[i];	
			}
			else if(sum>0&&sum<avg-tip[i]){
				sum=sum-avg+tip[i];
				amt+=1;
			}
			else if(sum>0&&sum==avg-tip[i])sum=0;
			else if(sum<=0){
				sum=sum-avg+tip[i];
				amt+=1;
			}
		}
		else if(tip[i]>=avg){
			if(sum>=0){
				if(tip[i]+sum-avg>0)amt+=1;
				sum=sum+tip[i]-avg;
			}
			else if(sum<0){
				if(sum+tip[i]-avg>0){
					amt+=1;
					sum=sum+tip[i]-avg;
				}
				if(sum+tip[i]-avg<0){
					amt+=1;
					sum=sum+tip[i]-avg;
				}
			}
		}
	}
	printf("%d\n",amt);
	return 0;
}
2024/11/27 21:29
加载中...