一道简单但是豁然开朗的题

发布时间 2023-10-12 21:16:08作者: du463

image

思路:

因为是要将一个数分成三个不能被3整除的数字,那么我们就可以分情况讨论,
如果n%3=0,我们需要将三个数字改成%3=1的数字,要想满足情况最小的是12(分成1 4 7)
如果n%3=1,那我们要分成两个%3=1的数字和一个%3=2的数字,那么最小是7(分成1 2 4)
如果n%3=2,那么我们就要分成两个%3=2的数字和一个%3=1的数字,那么最小是8(分成1 2 5)

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){
	int n;
	cin>>n;
	if(n%3==0){
		if(n>=12){
			cout<<"YES"<<endl;
			cout<<1<<" "<<4<<" "<<n-5<<endl;

		}
		else cout<<"NO"<<endl;
	}
	else if(n%3==1){
		if(n>=7){
			cout<<"YES"<<endl;
			cout<<1<<" "<<2<<" "<<n-3<<endl;

		}
		else{
			cout<<"NO"<<endl;

		}
	}
	else{
		if(n>=8){
			cout<<"YES"<<endl;
			cout<<1<<" "<<2<<" "<<n-3<<endl;
		}
		else{
			cout<<"NO"<<endl;

		}
	}
	return ;
	
}

int main(){
	int t=1;
	cin>>t;
	
	while(t--){
		solve();
	}
	return 0;

}