1. 问题描述:
给定一个整数 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 ≤ T ≤ 1000,1 ≤ n ≤ 1000。
输入样例:
4
30
67
4
14
输出样例:
0 6 0
0 5 6
-1
0 0 2
来源:https://www.acwing.com/problem/content/3629/
2. 思路分析:
分析题目可以知道x,y,z中最大的数为n // 3,而且n最大是1000,所以可以暴力枚举x和y的值,对于z我们可以判断n - 3x - 5y是否是7的倍数,并且n >= 3x + 5y,如果满足这两个条件说明满足当前枚举的x,y和z满足方程大于等于0的整数解的要求。
3. 代码如下:
class Solution:
def process(self):
T = int(input())
for c in range(T):
flag = 0
n = int(input())
# 暴力枚举前两个数
for i in range(n // 3 + 1):
for j in range(n // 3 + 1):
# 第三个数必须大于等于0
if n >= 3 * i + 5 * j and (n - 3 * i - 5 * j) % 7 == 0:
print(i, j, (n - 3 * i - 5 * j) // 7)
flag = 1
break
if flag: break
if flag == 0: print(-1)
if __name__ == '__main__':
Solution().process()