鱼C论坛

 找回密码
 立即注册
查看: 2073|回复: 20

[已解决]求助一道关于矩阵的PYTHON题目

[复制链接]
发表于 2019-4-13 22:33:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 超级新手 于 2019-4-14 10:20 编辑

要求: 判断上三角矩阵

上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。

输入样例:
2
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
输出样例:
YES
NO

我写了代码是这样的
num=int(input())
b=[]
for i in range(num):
    row=int(input())
    for j in range(row):
        y=input().split(" ")
    for s in range(1,2):
        if row==1:
           if y[0]=="0":
              b.append("YES")
              
           else:
              b.append("NO")
              
        else:
           if j>0:
               for k in range(j):
                 if y[k]!="0":
                    b.append ("NO")
                    break
           if j==row-1:
                for l in range(j):
                    if y[l]!="0":
                       
                      break
                    elif l==j-1 and y[l]=="0":
                        b.append("YES")
                        break
for i in b:
    print(i)

但是还是有缺陷
发现如果输入
4
2
1 2
3 4
2
1 4
2 6
2
3
3
2
3
3
还是可以运行 我该怎样修改呢?
或者有更好的方法吗
希望大家能教教我
谢谢大家
最佳答案
2019-4-14 10:40:24
超级新手 发表于 2019-4-14 10:04
哥德巴赫猜想那一题也不太会

关于猜想:
  1. # coding: utf-8
  2. import math

  3. def  issh(x):
  4.     #返回1 表示是一个素数
  5.     if x<=1:
  6.       return 0
  7.     if x>1:
  8.       for i in range(2,int(math.sqrt(x))+1):
  9.         if x%i==0:
  10.           return 0;
  11.     return 1


  12. if __name__=='__main__':
  13.     for j in range(4,31,2):
  14.         k=0
  15.         i=1
  16.         while i<j:
  17.             if issh(i)==1 and issh(j-i)==1:
  18.                 print("%d=%d+%d"%(j,i,j-i))
  19.                 k+=1
  20.                 break
  21.             i+=1        
  22.         if(k==0):
  23.           print("%d不能被分解成2个素数之和.\n"%j)
  24.    
  25.    
  26. '''
  27. 运行结果演示:
  28. e:\>python ex23.py
  29. 4=2+2
  30. 6=3+3
  31. 8=3+5
  32. 10=3+7
  33. 12=5+7
  34. 14=3+11
  35. 16=3+13
  36. 18=5+13
  37. 20=3+17
  38. 22=3+19
  39. 24=5+19
  40. 26=3+23
  41. 28=5+23
  42. 30=7+23
  43. '''
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-4-13 23:17:39 | 显示全部楼层
还有这一题
验证“哥德巴赫猜想” (20 分)
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

输入格式:
输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。

输出格式:
在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。

输入样例:
24
输出样例:
24 = 5 + 19
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-14 09:30:27 | 显示全部楼层
有人吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-14 09:59:22 | 显示全部楼层
一下子发一长串代码,不写思路,也不写运行中的报错,怎么帮你解决
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-14 10:03:42 | 显示全部楼层
苏绛雪 发表于 2019-4-14 09:59
一下子发一长串代码,不写思路,也不写运行中的报错,怎么帮你解决

是按着题目的思路写的
运行没有错误
但是发现这样输入不符合要求
其它都对的
可以帮忙看看吗
谢谢您
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-14 10:04:36 | 显示全部楼层
苏绛雪 发表于 2019-4-14 09:59
一下子发一长串代码,不写思路,也不写运行中的报错,怎么帮你解决

哥德巴赫猜想那一题也不太会
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-14 10:40:24 | 显示全部楼层    本楼为最佳答案   
超级新手 发表于 2019-4-14 10:04
哥德巴赫猜想那一题也不太会

关于猜想:
  1. # coding: utf-8
  2. import math

  3. def  issh(x):
  4.     #返回1 表示是一个素数
  5.     if x<=1:
  6.       return 0
  7.     if x>1:
  8.       for i in range(2,int(math.sqrt(x))+1):
  9.         if x%i==0:
  10.           return 0;
  11.     return 1


  12. if __name__=='__main__':
  13.     for j in range(4,31,2):
  14.         k=0
  15.         i=1
  16.         while i<j:
  17.             if issh(i)==1 and issh(j-i)==1:
  18.                 print("%d=%d+%d"%(j,i,j-i))
  19.                 k+=1
  20.                 break
  21.             i+=1        
  22.         if(k==0):
  23.           print("%d不能被分解成2个素数之和.\n"%j)
  24.    
  25.    
  26. '''
  27. 运行结果演示:
  28. e:\>python ex23.py
  29. 4=2+2
  30. 6=3+3
  31. 8=3+5
  32. 10=3+7
  33. 12=5+7
  34. 14=3+11
  35. 16=3+13
  36. 18=5+13
  37. 20=3+17
  38. 22=3+19
  39. 24=5+19
  40. 26=3+23
  41. 28=5+23
  42. 30=7+23
  43. '''
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-14 10:44:24 | 显示全部楼层
本帖最后由 超级新手 于 2019-4-14 10:55 编辑



谢谢您!!!!
我会啦
请问您能再帮我看看前面的代码吗
错误点是    输入最小n与次小n  不符合题目的要求
或者 有符合题目的另外一种写法让我学习一下吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-14 11:27:14 | 显示全部楼层
超级新手 发表于 2019-4-14 10:44
谢谢您!!!!
我会啦
请问您能再帮我看看前面的代码吗

你哪里迷惑呢?
我没按照要求写,我下面代码只是输出了对角线以下的数据  

  1. # coding: utf-8

  2. if __name__=='__main__':
  3.   t=[[1,2,3,4],[0,1,2,3],[0,0,1,2],[0,0,0,1]]
  4.   for i in range(1,4):
  5.     for j in range(0,3):
  6.       if i>j:
  7.         print("%4d"%t[i][j],end='')
  8.     print('')  
  9.        
  10. '''
  11. e:\>python ex24.py
  12.    0
  13.    0   0
  14.    0   0   0
  15. '''   
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-14 11:41:19 | 显示全部楼层
wp231957 发表于 2019-4-14 11:27
你哪里迷惑呢?
我没按照要求写,我下面代码只是输出了对角线以下的数据

我的代码部分不符合题目的要求
当输入最小n与次小n时,答案错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-14 11:57:26 | 显示全部楼层
for i in range(num): 等同于 for i in range(0,num):  数量是num个  索引是0-----num-1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-14 12:05:37 | 显示全部楼层
wp231957 发表于 2019-4-14 11:57
for i in range(num): 等同于 for i in range(0,num):  数量是num个  索引是0-----num-1

-1或者+1结果不对了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-14 12:23:55 | 显示全部楼层
wp231957 发表于 2019-4-14 11:57
for i in range(num): 等同于 for i in range(0,num):  数量是num个  索引是0-----num-1

救救我 我不行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-14 13:01:18 | 显示全部楼层
超级新手 发表于 2019-4-14 12:05
-1或者+1结果不对了

你看看是不是这个意思:

  1. # coding: utf-8

  2. if __name__=='__main__':
  3.   ts=int(input("请输入测试矩阵的数目1++>>>"))
  4.   tsi=0
  5.   while tsi<ts:
  6.     t=[]
  7.     num=int(input("请输入第%d个测试矩阵行列,行=列,比如4*4 输入4>>>"%(tsi+1)))
  8.     if num<2:
  9.        print("输入错误")
  10.        exit()
  11.     i=0
  12.     while i<int(num):
  13.       ls=input("请输入第%d行内容每行%d个数字 数字与数字之间用空格隔开>>>"%(i+1,num))
  14.       t.append(ls.split(' '))
  15.       i+=1
  16.     for j in range(0,num):
  17.       print(t[j])  
  18.     tsi+=1
  19.     flag=0
  20.     for m in range(1,num):
  21.       for n in range(num):
  22.         if m>n:
  23.           #print("%4d"%int(t[m][n]),end='')
  24.           if int(t[m][n])!=0:
  25.             flag=1
  26.             break
  27.       if flag==1:
  28.         break     
  29.     if flag==1:
  30.       print("NO")
  31.     else:
  32.       print("YES")   
  33.         
  34. '''
  35. e:\>python ex24.py
  36. 请输入测试矩阵的数目1++>>>4
  37. 请输入第1个测试矩阵行列,行=列,比如4*4 输入4>>>2
  38. 请输入第1行内容每行2个数字 数字与数字之间用空格隔开>>>1 2
  39. 请输入第2行内容每行2个数字 数字与数字之间用空格隔开>>>0 3
  40. ['1', '2']
  41. ['0', '3']
  42. YES
  43. 请输入第2个测试矩阵行列,行=列,比如4*4 输入4>>>3
  44. 请输入第1行内容每行3个数字 数字与数字之间用空格隔开>>>1 2 3
  45. 请输入第2行内容每行3个数字 数字与数字之间用空格隔开>>>4 5 6
  46. 请输入第3行内容每行3个数字 数字与数字之间用空格隔开>>>0 0 5
  47. ['1', '2', '3']
  48. ['4', '5', '6']
  49. ['0', '0', '5']
  50. NO
  51. 请输入第3个测试矩阵行列,行=列,比如4*4 输入4>>>4
  52. 请输入第1行内容每行4个数字 数字与数字之间用空格隔开>>>1 2 3 4
  53. 请输入第2行内容每行4个数字 数字与数字之间用空格隔开>>>0 1 2 3
  54. 请输入第3行内容每行4个数字 数字与数字之间用空格隔开>>>0 0 6 9
  55. 请输入第4行内容每行4个数字 数字与数字之间用空格隔开>>>0 0 0 5
  56. ['1', '2', '3', '4']
  57. ['0', '1', '2', '3']
  58. ['0', '0', '6', '9']
  59. ['0', '0', '0', '5']
  60. YES
  61. 请输入第4个测试矩阵行列,行=列,比如4*4 输入4>>>5
  62. 请输入第1行内容每行5个数字 数字与数字之间用空格隔开>>>1 2 3 4 5
  63. 请输入第2行内容每行5个数字 数字与数字之间用空格隔开>>>0 2 3 5 6
  64. 请输入第3行内容每行5个数字 数字与数字之间用空格隔开>>>0 0 7 8 9
  65. 请输入第4行内容每行5个数字 数字与数字之间用空格隔开>>>0 0 0 7 9
  66. 请输入第5行内容每行5个数字 数字与数字之间用空格隔开>>>0 0 0 0 1
  67. ['1', '2', '3', '4', '5']
  68. ['0', '2', '3', '5', '6']
  69. ['0', '0', '7', '8', '9']
  70. ['0', '0', '0', '7', '9']
  71. ['0', '0', '0', '0', '1']
  72. YES

  73. '''               
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-14 13:54:40 | 显示全部楼层
本帖最后由 超级新手 于 2019-4-14 13:57 编辑
wp231957 发表于 2019-4-14 13:01
你看看是不是这个意思:


大概是这样的
可以把输入放在一起,然后逐个处理后,一起输出结果吗
对于最小n与次小n还是不成立   这个该怎么办呢
如果 只有矩阵里面只有一个数 为0 也输出Yes 是这个意思吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-14 14:07:56 | 显示全部楼层
超级新手 发表于 2019-4-14 13:54
大概是这样的
可以把输入放在一起,然后逐个处理后,一起输出结果吗
对于最小n与次小n还是不成立    ...

一起输出结果 问题不大
你说的神马次小n 最小n 我没看懂 不知道是神马
另: 我认为题目既然说矩阵 神马对角线啥的  最低也得是2*2以上的矩阵吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-14 14:12:40 | 显示全部楼层
本帖最后由 wp231957 于 2019-4-14 14:13 编辑

e:\>python ex24.py
请输入测试矩阵的数目1++>>>3
请输入第1个测试矩阵行列,行=列,比如4*4 输入4>>>3
请输入第1行内容每行3个数字 数字与数字之间用空格隔开>>>1 2 3
请输入第2行内容每行3个数字 数字与数字之间用空格隔开>>>0 2 5
请输入第3行内容每行3个数字 数字与数字之间用空格隔开>>>0 0 8
请输入第2个测试矩阵行列,行=列,比如4*4 输入4>>>2
请输入第1行内容每行2个数字 数字与数字之间用空格隔开>>>2 5
请输入第2行内容每行2个数字 数字与数字之间用空格隔开>>>1 5
请输入第3个测试矩阵行列,行=列,比如4*4 输入4>>>4
请输入第1行内容每行4个数字 数字与数字之间用空格隔开>>>1 2 3 4
请输入第2行内容每行4个数字 数字与数字之间用空格隔开>>>0 2 3 6
请输入第3行内容每行4个数字 数字与数字之间用空格隔开>>>0 0 5 8
请输入第4行内容每行4个数字 数字与数字之间用空格隔开>>>0 0 0 9
YES
NO
YES

代码见18楼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-14 14:13:13 | 显示全部楼层
超级新手 发表于 2019-4-14 13:54
大概是这样的
可以把输入放在一起,然后逐个处理后,一起输出结果吗
对于最小n与次小n还是不成立    ...
  1. # coding: utf-8

  2. if __name__=='__main__':
  3.   ts=int(input("请输入测试矩阵的数目1++>>>"))
  4.   tsi=0
  5.   result=[]
  6.   while tsi<ts:
  7.     t=[]
  8.     num=int(input("请输入第%d个测试矩阵行列,行=列,比如4*4 输入4>>>"%(tsi+1)))
  9.     if num<2:
  10.        print("输入错误")
  11.        exit()
  12.     i=0
  13.     while i<int(num):
  14.       ls=input("请输入第%d行内容每行%d个数字 数字与数字之间用空格隔开>>>"%(i+1,num))
  15.       t.append(ls.split(' '))
  16.       i+=1
  17.     #for j in range(0,num):
  18.       #print(t[j])  
  19.     tsi+=1
  20.     flag=0
  21.     for m in range(1,num):
  22.       for n in range(num):
  23.         if m>n:
  24.           #print("%4d"%int(t[m][n]),end='')
  25.           if int(t[m][n])!=0:
  26.             flag=1
  27.             break
  28.       if flag==1:
  29.         break     
  30.     if flag==1:
  31.       result.append("NO")
  32.     else:
  33.       result.append("YES")   
  34.   for x in result[:]:
  35.     print(x)
  36.         
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-14 14:37:31 | 显示全部楼层

我把代码输入后
答题系统说还是回答错误  总共15分 得分12分
测试点的错误提示是这个“当输入最小n与次小n时,答案错误”
每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。
可能是说n=1 n=2 的情况有问题吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-14 15:03:21 From FishC Mobile | 显示全部楼层
超级新手 发表于 2019-4-14 14:37
我把代码输入后
答题系统说还是回答错误  总共15分 得分12分
测试点的错误提示是这个“当输入最小n与次 ...

2*2矩阵没问题的,那你再把1*1矩阵填上,自己填,应该没问题吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-6 04:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表