给定一个整数 n,请你求出三元一次方程 3x+5y+7z=n 的一组非负整数解。
要求:
- x≥0,y≥0,z≥0
- 如果解不唯一,则输出 x,y,z 字典序最小的解。
输入格式
第一行包含一个整数 T,表示共有 T 组测试数据。
每组数据占一行,包含一个整数 n。
输出格式
每组数据输出一行结果,如果无解则输出 −1,否则输出 x,y,z,整数之间单个空格隔开。
数据范围
对于前三个测试点,1≤n≤100。
对于全部测试点1≤n≤10001≤n≤1000。
输入样例:
4
30
67
4
14
输出样例:
0 6 0
0 5 6
-1
0 0 2
比较字典序最小,从前往后比较,因此需要把前面的尽量最小
#include<iostream>
using namespace std;
int main(){
int T,n;
cin>>T;
while(T--){
cin>>n;
if(n==4||n<3){
cout<<-1<<endl;
continue;
}
int t=0;
for(int i=0;i<=n/3;i++){
for(int j=0;j<=n/5;j++){
if((n-3*i-5*j)%7==0){
cout<<i<<" "<<j<<" "<<(n-3*i-5*j)/7<<endl;
t=1;
break;
}
}
if(t==1)break; //如果有解后就退出循环减少计算量
}
}
return 0;
}