📌  相关文章
📜  国际空间研究组织 | ISRO CS 2016 |问题 11(1)

📅  最后修改于: 2023-12-03 15:37:15.435000             🧑  作者: Mango

国际空间研究组织 - ISRO CS 2016 - 问题 11

题目描述

给定一个整数 N,输出 N 行,每行由数字 1 到 N 组成,如果一个数字 j 与数字 i 满足 1 ≤ j < i ≤ N,且 j 与 i 互质,则在行 i 和列 j 的交叉处显示字符 X,否则显示字符 0。例如,对于 N=5,输出为:

1 0 X 0 X
0 1 0 0 0
X 0 1 0 X
0 0 0 1 0
X 0 X 0 1
输入格式
  • 单独一行,包含一个整数 N。(1 ≤ N ≤ 50)
输出格式
  • 输出 N 行,每行包含 N 个字符,用空格隔开。
输入样例
5
输出样例
1 0 X 0 X
0 1 0 0 0
X 0 1 0 X
0 0 0 1 0
X 0 X 0 1
程序实现

首先,我们需要实现一个函数来判断两个数是否互质。如果两个数 x 和 y 互质,则它们的最大公约数 gcd(x, y) 等于 1。

def are_coprime(x, y):
    for i in range(2, min(x, y) + 1):
        if x % i == 0 and y % i == 0:
            return False
    return True

接下来,我们可以使用双重循环来遍历所有的行和列,对于每个交叉处,如果行列数相同,则输出 1;否则,如果两个数互质,则输出 X;否则,输出 0。

n = int(input())

for i in range(1, n + 1):
    for j in range(1, n + 1):
        if i == j:
            print('1', end=' ')
        elif are_coprime(i, j):
            print('X', end=' ')
        else:
            print('0', end=' ')
    print()

这样,我们就完成了本题的解答。完整的代码如下所示:

def are_coprime(x, y):
    for i in range(2, min(x, y) + 1):
        if x % i == 0 and y % i == 0:
            return False
    return True

n = int(input())

for i in range(1, n + 1):
    for j in range(1, n + 1):
        if i == j:
            print('1', end=' ')
        elif are_coprime(i, j):
            print('X', end=' ')
        else:
            print('0', end=' ')
    print()
参考资料