题目1:猴子选大王【问题描述】要从n只猴子中选出一位大王。它们决定使用下面的方法: n只猴子围成一圈,从1到n顺序编号。从第q只猴子开始,从1到m报数,凡报到m的猴子退出竞选,下一次又从退出的那只猴子的下一只开始从1到m报数,直至剩下的最后一只为大王。请问最后哪只猴子被选为大王。 【输入形式】控制台输入三个整数n,m,q。 【输出形式】输出最后选为大王的猴子编号
明确思路:把第q只猴子当成第一只猴子进行,把每只猴子对应列表中的位置令为1,进行操作,淘汰的猴子令为0,最后再进行判断即可。注意,最后得出的猴子序号要加上q-1返回原本对应的猴子编号 ,另外返回得出的编号大于猴子总数,这时对猴子总数求余即可。 难度系数:三颗星
代码如下:N,m,q= input().split()N=int(N)m=int(m)q=int(q)stand = []for i in range(N): stand.append(1)c=0n = Nwhile n>=2: for i in range(0,N): if stand[i]==1: c = c+1 if c==m: stand[i] = 0 c = 0 n = n-1num=stand.index(1)+qprint(num%N)
【样例输入】 7 4 3 【样例输出】 4
题目2:造句练习【问题描述】假设有三个列表: Ist who=小马,'小羊,'小鹿], Ist where草地上,电影院,家里], Ist what=看电影,听故事’吃晚饭]。写出所有造句结果
明确思路:使用循环嵌套,遍历每种情况,将每种组合进行输出难度系数:一颗星
代码如下:import ioimport syssys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')sys.stdin = io.TextIOWrapper(sys.stdin.buffer,encoding='utf-8')who=['小马','小羊','小鹿']where=['草地上','电影院','家里']what=['看电影','听故事','吃晚饭']ls=[]for i in range(3): for j in range(3): for t in range(3): ls.append(str(who[i])+'在'+str(where[j])+str(what[t]))for i in ls: print(i)
【样例输出】小马在草地上看电影小马在草地上听故事小马在草地上吃晚饭小马在电影院看电影小马在电影院听故事小马在电影院吃晚饭小马在家里看电影小马在家里听故事小马在家里吃晚饭小羊....
题目三:求二维整型数组“鞍点”【问题描述】求二维整型数组的鞍点。二维数组的;鞍点定义为:某个数是所在行的最大值,并且是所在列的最小值。【输入形式】从控制台读入二维数组。第一行只有以空格分隔的两个正整数n和m(n,m<=10),n代表二维数组的行数,m代表二维数组的列数。然后在后续n行上输入二维数组的元素,每行有m个以若干空格分隔的整数,代表二维数组在该行上的所有元素。【输出形式】向控制台输出二维数组的鞍点,按行下标、列下标从小到大的顺序输出,每行一个,先输出鞍点数值,再输出对应的行下标、列下标(下标从1开始),以空格分隔。若没有鞍点,则输Noanswer。
明确思路:先解决二维数组的输入,再进行计算,具体思路标注在如下代码中。难度系数:五颗星
m,n=input().split()m=int(m)n=int(n)ls=[]lt=[]dp=[]#输入并转换为数值列表for i in range(m): a=list(input().split()) for j in range(n): a[j]=int(a[j]) ls.append(a)#选每行最大值for i in range(m): b=max(ls[i]) #判断有无重复最大值 if ls[i].count(b)==1: c=ls[i].index(b) #选列最小值 for k in range(m): lt.append(ls[k][c]) d=min(lt) #判断该点是否为鞍点 if b==d: dp.append([b,i+1,c+1]) lt.clear() #再判断重复为二,步骤同上 elif ls[i].count(b)==2: c=ls[i].index(b) for k in range(m): lt.append(ls[k][c]) d=min(lt) if b==d: dp.append([b,i+1,c+1]) lt.clear() ls[i][c]=0 o=max(ls[i]) p=ls[i].index(o) for k in range(m): lt.append(ls[k][p]) d=min(lt) if b==d: dp.append([b,i+1,p+1]) lt.clear()#判断有无鞍点if len(dp)==0: print('No answer')else: #将数值列表转换成字符串列表,再将列表转换成字符串输出 for i in dp: i=[str(g) for g in i] j=' '.join(i) print(j)
【样例输入】3 48 60 7 10010 49 12 49-71 132 4 85 【样例输出】 49 2 249 2 4
经验总结:对于刚学习这一部分的人来说,第三题会比较困难,一些基础操作不会,对于我自己,有些操作没有学过,就自己上网查,但是一般问题没办法直接得到解决,甚至有些信息是不太准确的,我都是查一点资料联系自己的方式理解一点,然后慢慢思考,有的时候一道题比较难的时候会花两三天时间才能解决。不过,当每次思考出来的时候会觉得收获很多,长期累积,做题的经验也会很多,碰到难题心里也不会慌了。
思考的时候不要心急,慢慢来,欲速则不达。
经常回顾思考这些题,会有新的收获呦。