ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法实验1(三门全及格)

2022-04-14 20:04:07  阅读:265  来源: 互联网

标签:及格 学号 int 学生 三门 算法 input 输入


1.      利用数组实现原始信息与处理结果的对应存储。

一次考试共考了语文、代数和外语三科。某小组共有九人,考后各科及格名单如下表,请编写算法找出三科全及格的学生的名单(学号)。各科及格学生的学号如下表,编写程序依次输入及格学生的学号,输出3科全部及格的学生学号。

 

思考:

(1)怎样用更方便的存储方式提高算法的效率?

(2)分析设计的算法的时间复杂度。

 

思路1:枚举法

 拿语文学号和代数依次比较,如果相同,则执行下一层循环,和外语作比较,找到相同的进行输出

 1 a = []
 2 yw = int(input('请输入语文及格学生的学号,输入-1结束:'))
 3 while yw != -1:
 4     a.append(yw)
 5     yw = int(input('请输入语文及格学生的学号,输入-1结束:'))
 6 
 7 b = []    
 8 ds = int(input('请输入代数及格学生的学号,输入-1结束:'))
 9 while ds != -1:
10     b.append(ds)
11     ds = int(input('请输入代数及格学生的学号,输入-1结束:'))
12 
13 c = []
14 wy = int(input('请输入外语及格学生的学号,输入-1结束:'))
15 while wy != -1:
16     c.append(wy)
17     wy = int(input('请输入外语及格学生的学号,输入-1结束:'))
18 print('三科全及格学生学号:',end = '')
19 for i in range(0,len(a)):
20     key = a[i]
21     for j in range(0,len(b)):
22         if b[j] != key:
23             continue
24         for k in range(0,len(c)):
25             if key==c[k]:
26                 print(key,end = ' ')
27                 break

错误点

1、第一次测试时候, 代码的while循环里没有这个语句,结果只能输一次学号

yw = int(input('请输入语文及格学生的学号,输入-1结束:'))

2、第二次,我以为是因为没有加end = ' '这个语句(我不知道这个语句是干啥的),加上后,依旧没有输出

3、我又检查了一遍代码,查了下break用法,原来这里应该用continue而不是break。。。

for j in range(0,len(b)):
    if b[j] != key:
        continue

 

改进:我希望能一直执行这些代码,而不是一轮就结束了,而且当输入负数时会报错,让重新输入

 1 while True:
 2     a = []
 3     yw = int(input('请输入语文及格学生的学号,输入-1结束:'))
 4     while yw !=-1:
 5         if yw > -1:              
 6             a.append(yw)
 7             yw = int(input('请输入语文及格学生的学号,输入-1结束:'))
 8         else:
 9             yw = int(input('请重新输入大于零的学号,输入-1结束:')) 
10 
11     b = []    
12     ds = int(input('请输入代数及格学生的学号,输入-1结束:'))    
13     while ds != -1:
14         if ds > -1:    
15             b.append(ds)
16             ds = int(input('请输入代数及格学生的学号,输入-1结束:'))
17         else:
18             ds = int(input('请重新输入大于零的学号,输入-1结束:'))
19             
20     c = []
21     wy = int(input('请输入外语及格学生的学号,输入-1结束:'))
22     while wy != -1:
23         if wy > -1:
24             c.append(wy)
25             wy = int(input('请输入外语及格学生的学号,输入-1结束:'))
26         else:
27             wy = int(input('请重新输入大于零的学号,输入-1结束:'))
28             
29     print('三科全及格学生学号:',end = '')
30     for i in range(len(a)):
31         key = a[i]
32         for j in range(len(b)):
33             if b[j] != key:
34                 continue
35             for k in range(len(c)):
36                 if key==c[k]:
37                     print(key,end = ' ')
38                     break
39     print('\n==================================')

改进【未来】:里面模式都差不多,希望有种方法可以让我压缩代码

 

思路2:

用数组a的九个下标分量作为各学号考生及格科目的计数器。将3科共存一个数组,当扫描完毕总及格名单后,凡计数器的值为3,就是3科全部及格的学生。否则,至少有一科未及格。

 1 a = []
 2 for i in range(1,11):
 3     a.append(0)
 4 xh = int(input("请输入及格学生的学号1--9,输入-1结束:"))
 5 while xh != -1:
 6     a[xh] += 1
 7     xh= int(input("请输入及格学生的学号1--9,输入-1结束:"))
 8 print("三科全部及格的学生:", end="")
 9 for xh in range(1,10):
10     if a[xh] == 3:  #若将3改为其他数n,则求得的是n科成绩及格的学生
11         print(xh,end=" ")

【参考CSDN——python小明】

 

学到的知识点

1、end="" 的用处就是表示该行 print 后还没有结束,后面还有内容,取消换行,end=‘ ’引号里面可以加空格,进行分隔

2、break:终止当前循环,如果只有一层,则执行循环后面的代码,如果不止一层,跳到上一层

     continue:跳过此次循环

 

标签:及格,学号,int,学生,三门,算法,input,输入
来源: https://www.cnblogs.com/yikeboluo/p/16146242.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有