if __name__ == "__main__": print('输入第1行:二维数组的行数(列数一样) N \n接下来的 N 行每行 N 个数字,空格分割') # 设定 N 为 二维数组的行数, # input()是输入事件, # int()把输入的字符串型的数据 转换成整型 N = int(input()) # 根据已知条件,给定一个 N*N 的矩阵 M, 矩阵 M 本质上是一个二维数据 # 设定 M 为 二维数组 M = [] # 使用For循环 生成 M 二维数组 # 根据 N (二维数组的行数) 接收 N 次输入的信息 并 依次填充到 M 二维数组中 for i inrange(N): # 接收输入的信息 # 使用For循环 接收 输入的信息 # strip()方法 去掉 字符串中头尾的空格或换行符 # split()方法 根据指定的字符,将字符串拆分成若干个元素的数组 node = [int(x) for x ininput().strip().split(' ')] # 填充到 M 二维数组中 M.append(node) # 设定一个 N 大小的临时数组 temp = [0] * N # 设定 k 为 豆油瓶的数量 k = 0 # 获得临时数组中的最小值,当最小值为0时,进入while循环 whilemin(temp) == 0: # 使用For循环 依次将 N 二维数组中的数据取出,存入 t = [i for i inrange(N) if temp[i] == 0] temp[t[0]] = 1 q = [] q.append(t[0]) while q: # pop()方法 移除列表中的一个元素并返回该元素的值 h = q.pop(0) for j inrange(N): # 如果互动大于 3 次 if M[h][j] >=3and temp[j] == 0: q.append(j) temp[j] = 1 k += 1 print('输出发现的“豆油瓶”数量 k: %d'%k)
运行结果:
第二题
题目描述: 现有一个圆形花园共有 n 个入口,现在要修些路,穿过这些花园。要求每个入口只能有一条路,所有的路均不会相交,求所有可行的方法总数。
输入描述
整数n,代表有n个花园入口,n为2的倍数,n在2到1000的整数区间范围内
输出描述
输出整数 m mod 1000000007,采用 mod 1000000007 降低数字量级。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
if __name__ == "__main__": print('请输入整数 n (代表有 n 个花园入口,n 为 2 的倍数,n 在 2 到 1000 的整数区间范围内):') # 设定 整数n,代表有n个花园入口,n为2的倍数,n在2到1000的整数区间范围内 n = int(input()) # 设定 输出整数 m m = [0] * (n + 1) m[0] = 1 # 使用For循环,从 2 开始,每次循环增加 2 for i inrange(2, n+1, 2): for j inrange(0, (i-2)+1, 2): # 使用卡特兰数的递推公式 m[i] += (m[j] * m[i - 2 - j]) # 采用 mod 1000000007 降低数字量级 m[i] = m[i] % 1000000007 print(m[n]) print('输出整数 m: %d'%m[n])
### 判断两个数的最大公约数 defcal(a,b): if (a<=1or b<=1): return0 t = 2 while(t<=math.sqrt(a) and t <= math.sqrt(b)): if (a % t == 0and b % t == 0): return1 t+=1 return0
if __name__ == "__main__": print('首先输入一个数字 n 表示天上有n个糖果 \n接下来一行 有 n 个数字,表示各个糖果的甜度') # 设定 n 表示天上有n个糖果 # input()是输入事件, # int()把输入的字符串型的数据 转换成整型 n = int(input()) # 输入 每颗 糖果的甜度 sweet = input().strip().split(' ') s = [] # 将糖果一一编号1,2,3,……,n for num inrange(1,n+1): s.append(int(num)) queue = [] # 最少可获得一个糖果 sugar = 1 for i inrange(n): if i notin s: count = 1 queue.append(i) while(queue): temp = queue[0] # 将移除列表中的最后一个元素 queue.pop() for j inrange(n): # 判断糖果i和糖果j的甜度的最大公约数 if temp notin s and cal(int(sweet[i]), int(sweet[j])) == 1and i != j: # 则糖果i和糖果j之间有桥梁连接 count+=1 queue.append(temp) s.append(temp) if count > sugar: sugar = count print('最多能获得%d个糖果'%sugar)