Question
给定一个正整数 N ,我们需要找三个不同的整数x,y,z,使得 N = x+y+z,其中下x,y,z不能被三整除
solution
我们把N%3会有一些余数,我们针对余数来讨论,其中我们只关注xyz的余数
-
如果余数为0
那么也就可能是1+1+1,或者2+2+2,但是考虑到xyz不同,所以如果 \(xyz\%3\) 相同的话,\(xyz/3\) 肯定不可能相同,所以只有可能是 \(1+4+7=12\) 所以小于 \(12\) 的就不可能了 -
如果余数为1
可以分解为 \(1+2+1\) 最小值也就是 \(1+2+4=7\) -
如果余数为 \(2\)
可以分解为 \(1+2+2\) 最小值就是 \(1+2+5=8\)
code
#include<bits/stdc++.h>
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int ret=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
while(ch<='9'&&ch>='0')ret=ret*10+ch-'0',ch=getchar();
return ret*f;
}
int T;
int main(){
// freopen("A.in","r",stdin);
// freopen("A.out","w",stdout);
T=read();
while(T--){
int n=read(),x,y,z;
if(n%3==0){
if(n<12){printf("NO\n");continue;}
x=1,y=4,z=n-x-y;
}
if(n%3==1){
if(n<7){printf("NO\n");continue;}
x=1,y=2,z=n-x-y;
}
if(n%3==2){
if(n<8){printf("NO\n");continue;}
x=1,y=2,z=n-x-y;
}
printf("Yes\n%d %d %d\n",x,y,z);
}
return 0;
}
标签:CF1886A,ch,int,题解,Sum,ret,余数,xyz,getchar
From: https://www.cnblogs.com/martian148/p/17761856.html