数组+算法综合一 班级 姓名 1.【202212精诚】某校开设了10门选修课,用编号1~10表示。学校根据每位学生的问卷调查得分及选课报 名志愿进行分班,每班(即每门课)最多30人。如某同学的报名志愿表为4,1,2,7,3,5,8,10,9,6,表示他 最想选报的课编号是4(第一志愿),其次为1(第二志愿),以此类推。 选修课分班方法:优先满足问卷得分最高同学的第一志愿,如果该同学第一志愿课程所报名人数已满30 人,则尝试满足他的第二志愿,第二志愿若也无法满足,则再尝试其第三志愿以此类推,直至该同学选 课成功为止 假设报名人数是n(<300),所有人都能选上选修课,且同一个学生的十个志愿都是不同的(不会重复选 报同一个课程)。部分学生的选报情况如下表所示,数据已按学号升序排序。 AA K L M 1序号学号 得分志愿1志愿2志愿3志愿4志愿5志愿6志愿7志愿8志愿9志愿10 2 02210101312 2 6 9 8 5 3 1 4 10 7 3 12210102 231 3 6 1 10 5 9 2 4 8 22210103 240 8 1 Y 6 3 7 10 2 5 32210104 263 5 6 3 10 2 7 4 9 8 1 2322302211413 270 5 8 9 3 6 10 2 2332312211414315 10 2 3 1 9 8 1 6 2342322211415 242 3 10 1 5 4 7 9 2 8 6 (1)若某人的报名志愿表为7,3,2,5,1,9,8,6,4,10,目前只剩编号4和6的课程未录取满,则该同学最终被录取课 程编号是 (2)以下程序先从报名表中读入学生填报的志愿数据,然后按每人的得分降序排列,同时维护好每个学生原始 的序号,以便完成后续的查询操作。程序的最后是从高分开始按志愿录取。排好序的部分数据如下图所示, 请完善程序。 a=[];n-0 352210217380610581243796 f=open("报名志愿.csv") 10322107013801058127396410 for s in f.readlines()[1:] 272210209377751094316827 #将s中的字符以“,”为分割符并转换为整型量 1972211211377473528106194 a.append(list (map(int,s.split(',')))) 812210504376426531879104 a[n][1]=str(a[n][1]) 822210505375581263941075 n+=1 1712211022375875436110298 #idx[]存储原序列排序后的新位置 19022112043751067419385210 idx=[i for i in range(n)] for i in range(n-1): k=i for j in range(i+1,n): if① k=j if k!=i: a[i],a[k]=a[k],a[i] idx [a[i][O]]=i #原始序号排序后会跑到第ⅰ号位置上 b=[0]*10 for i in range(n): for t in ai]3:: ifb[t-1]<30 b[t-1]+=1 a[i].append(t) ②数组+算法综合一 班级 姓名 1.【202212精诚】 (1)6 (2)①a[j][2]>a[k][2] ②break (3)③index=idx[m] ④a[index][1]=m and a[i][2]!=a[i-1][2] 或 k>=5 and a[i][2]!=a[i-1][2] (4)randint(st,k-1) 或 randint(st,len(b)-1) 3.【202212慈溪适应】 (1)4 (2)①t=int(a[:i])*60+int(a[i+1:]) ②tm[j],tm[j+1]=tm[j+1],tm[j] ③i[1]>=t
~~ 您好,已阅读到文档的结尾了 ~~