题目描述

白浅妹妹今天学习了求余,她已经学会了,但是老师还是给了她𝑛个数字让她练习求余。 但是老师只给了𝑛个被除数,并没有说除数是几,只说除数的范围是[𝑙,𝑟]白浅妹妹决定自己设置除数,于是她从 [𝑙,𝑟]中选择了一个正整数𝑘,然后对每一个数字都对𝑘求余,得到了𝑛个新的数字。 白浅妹妹希望𝑛个新的数字之和尽可能小,于是她想问问你应该如何设置𝑘,如果有多种可能的答案,请输出最小的那一个。

分析:这题数据范围较小,暴力枚举能拿满分。外层循环l~r,内层循环0~n-1,用一个变量sum来累加数字求余k之后的数。用变量mi记录最小值,这里不用担心特殊情况n=1。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,l,r;
int chu[3005];
int mi=0x3f3f3f3f,mi2;
int main(){
	freopen("mod.in","r",stdin);
	freopen("mod.out","w",stdout);
	cin>>n>>l>>r;
	for(int i=0;i<n;i++) cin>>chu[i];
	for(int i=l;i<=r;i++){
		long long sum=0;
		for(int j=0;j<n;j++) sum+=chu[j]%i;
		if(mi>sum){
			mi=sum;
			mi2=i;
		}
		if(mi==0){
			cout<<mi2;
			return 0;
		}
	}
	cout<<mi2;
	return 0;
}

0 条评论

目前还没有评论...