- C题
题意:几个数字,挑选其中几个进行+1.得到的数字的乘积可以整除k
注意题目条件:
k只能是2,3,4,5这几种情况
每个数字只能是1——10(不算大)(好像没啥用,因为可以自增超过10)
思路:
对于2,3,5要想整除,这些个数里必须要有一个数是可以整除2,3,5的。所以思路很简单,去造,找到一个“变成5的倍数”所需+1最少的就行
对于4,分为几种情况:
1、原数组有两个偶数,那一定可以整除4,
2、原数组只有一个偶数,那就是输出1,找个奇数+1,一次操作即可
3、原数组没有偶数,全是奇数,那么就必须和2,3,5一样手动造4了,找到一个“变成4的倍数”所需+1最少的就行,但是要特判1,1
#include<bits/stdc++.h>
using namespace std;
#define int long long
using i64 = long long;
signed main()
{
ios::sync_with_stdio(false);cin.tie(nullptr);
int t = 1; cin >> t;
while(t--)
{
int x,n,k;cin>>n>>k;
int red=0;
int ans=1e18;
for(int i=0;i<n;i++)//输入数据
{
cin>>x;
if(x%k==0)
ans=0;
ans=min(ans,(k-x%k));//手动造数
if(x%2==0)//计算奇偶数量,对4的情况而做的
red++;
}
if(ans==0)//如果整除了,直接输出0即可
{
cout<<ans<<endl;
continue;
}
if(k==4)
{
if(red==0)//没有偶数
{//下面是对1,1的特判
//1,1 这是需要造3的,但是2就可以了
//3,3这是需要造1的
//所以,防止1,1的情况,如果出现了3,就给他改成2. 4这个模块下不可能有3,一定都能转换成2
cout<<min((int)2,ans)<<endl;
}
else if(red==1)
{
cout<<1<<endl;
}
else
{
cout<<0<<endl;
}
}
else
{
cout<<ans<<endl;
}
}
return 0;
}
标签:4.5,905,int,cin,long,x%,ans,Div,整除
From: https://www.cnblogs.com/yzzyang/p/18116020