nkoj 6498
Anodgd与“3” | ||
|
问题描述
nodgd非常喜欢数字,以及各种和 相关的东西。
现在nodgd有个正整数,他希望将拆分为三个正整数,满足,而且这个数都不是的倍数。请你帮他找到一种拆分方案。
输入格式
输入一个整数。
输出格式
输出一行三个整数,表示一种符合要求的拆分方案。拆分方案可能有很多种,输出任意一种即可。
样例输入
样例输入1:
3
样例输入2:
233
样例输出
样例输出1:
1 1 1
样例输出2:
77 77 79
这个题数据很弱,其实打暴力二重循环是可以过的。
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
int k=n-i-j;
if(i%3!=0&&j%3!=0&&k%3!=0){
cout<<i<<" "<<j<<" "<<k;
return 0;
}
}
}
但我想说的是一种数学的方法,各位都知道,和不是的倍数,那么在和中是不是一定有一种是符合条件的。
我们这么想如果中,是的倍数,那么在中,,所以这个时候一定不是的倍数。
那么的解法就出来了
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int x=n-1-2;
int y=n-1-1;
if(x%3!=0&&x>=1){
cout<<1<<" "<<2<<" "<<x;
}else{
cout<<1<<" "<<1<<" "<<y;
}
return 0;
}