3626 三元一次方程(枚举)

编程入门 行业动态 更新时间:2024-10-21 17:35:50

3626 三元一次<a href=https://www.elefans.com/category/jswz/34/1766651.html style=方程(枚举)"/>

3626 三元一次方程(枚举)

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
来源:/

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:# 求解当前等于n的x, y, z的解def work(self, n):x = 0while x * 3 <= n:y = 0while x * 3 + y * 5 <= n:if (n - 3 * x - 5 * y) % 7 == 0:print(x, y, (n - 3 * x - 5 * y) // 7)return Truey += 1x += 1return Falsedef process(self):T = int(input())for i in range(T):n = int(input())if not self.work(n):print(-1)if __name__ == '__main__':Solution().process()

更多推荐

3626 三元一次方程(枚举)

本文发布于:2023-06-29 10:46:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/943676.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:方程

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!