0
点赞
收藏
分享

微信扫一扫

3626 三元一次方程(枚举)

钵仔糕的波波仔 2022-03-30 阅读 49
算法

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()
举报

相关推荐

0 条评论