栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

2022.8.9考试平衡的余数--1000题解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2022.8.9考试平衡的余数--1000题解

2022.8.9考试平衡的余数--1000题解
  • 题目
  • 思路
  • 代码实现

题目

1、平衡的余数–1000
时间限制: | 空间限制:
题目描述:
给出一个正整数 ( 能被3整除)和一个大小为 的整数数组 。
在一次操作中,你可以选择任意一个 中的数并让它增加1。你可以对同一个位置上的数进行多次该操
作。
请求出至少需要多少步操作(可以是0次),使 中模3余 的数的个数相等。共 组测试数据。
输入格式:
第一行仅有一个正整数 ( ),表示测试数据的组数。
接下来有 组测试数据,每组共两行:
第一行仅一个正整数 ( , 能被3整除,且所有测试数据中 之和不超过
),表示数组大小;
第二行有 个整数 ( )用空格隔开。
输出格式:
对于每组测试数据,输出一行一个整数,表示至少多少次操作使 符合条件。

思路

余数为0 1 2的传导构成了一个环,所以只需要判断一遍与平均值的关系,传导即可。

代码实现
#include
using namespace std;

int t,n,ans;
int cnt[3];
int main(){
	scanf("%d",&t);
	while(t--){
		ans=0;
		memset(cnt,0,sizeof(cnt));
		scanf("%d",&n);
		for(int i=1;i<=n;i++){
			int a;
			scanf("%d",&a);
			cnt[a%3]++;
		} 
		int op=n/3;
		if(cnt[0]>op){
			int s=cnt[0]-op;
			ans+=s;
			cnt[0]=n/3;
			cnt[1]+=s;
		}
		else if(cnt[0]
			int s=op-cnt[0];
			ans+=s;
			cnt[2]-=s;
			cnt[0]=n/3;
		}
		if(cnt[2]>op){
			int s=cnt[2]-op;
			ans+=s;
			cnt[0]+=s;
			cnt[2]=n/3;
		}
		else if(cnt[2]
			int s=op-cnt[2];
			ans+=s;
			cnt[2]=n/3;
			cnt[1]-=s;
		}
		if(cnt[1]>op){
			int s=cnt[1]-op;
			ans+=s;
			cnt[1]=n/3;
			cnt[2]+=s;
		}
		else if(cnt[1]
			int s=op-cnt[1];
			ans+=s;
			cnt[1]=n/3;
			cnt[0]-=s;
		}
		printf("%dn",ans);
	}
	return 0;
}
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037116.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号