|
选择题T1.执行以下代码,输出结果是()。lst="abc"print(lst+lst)12'运行运行abcabcabclst+lstabc+abcT2.执行以下代码,输出的结果是()。age={16,18,17}print(type(sorted(age)))12'运行运行sorted(iterable,cmp=None,key=None,reverse=False)将返回一个新的list,不会改变原来的可迭代对象。T3.导入random标准库,执行print(random.randrange(2,20,2))语句,可能输出的结果是()。251320random.randrange([start,]stop[,step])必须参数stop表示随机生成的范围上限(不包括上限)start表示随机生成的范围下限(包括下限)step表示随机生成数之间的间隔,默认是1。T4.下列选项哪一个是转为整数的函数()?str()int()floatlist()T5.以下关于Python中复数描述,错误的是()。复数可以看作二元有序浮点数(x,y)实部和虚部都是浮点数虚数部分的后缀可以是"j",也可以是"J"已知复数a,可以使用real获得虚数部分。在Python中,复数类型用complex表示。它可以通过以下方式创建:直接指定实部和虚部:complex(real,imag),real是实数部分,imag是虚数部分。使用字符串:complex(string)例如:a=complex(3,4)#创建一个复数3+4ja=complex('3+4j')#创建一个复数3+4j12'运行运行编程题T1.N+N问题描述给定一个正整数NNN,计算出N+NN+NN+N的值。例如:N=4N=4N=4,4+44+44+4的值为888。输入描述输入一个正整数NNN输出描述输出N+NN+NN+N的值样例输入41样例输出81代码实现n=int(input())print(n+n)12'运行运行T2.字符问题描述给定一个只包含小写字母的字符串SSS(SSS长度≥3≥3≥3),请输出字符串SSS的第一个字符和最后一个字符。例如:当S="abc",abcabcabc的第一个字符为aaa,最后一个字符为ccc,故输出acacac。输入描述输入一个只包含小写字母的字符串SSS(SSS长度≥3≥3≥3)。输出描述输出字符串SSS的第一个字符和最后一个字符,两个字符之间没有空格及其他字符样例输入abc1样例输出ac1代码实现s=input()print(s[0]+s[-1])12'运行运行T3.数字币问题描述提示信息:合数指自然数中除了能被1和本身整除外,还能被其它正整数整除的数。例如444,444除了能被111和444整除,还可以被222整除。小明收藏了NNN(2≤N≤252≤N≤252≤N≤25)个数字币,每个数字币上都有一个面值(面值可以重复)。从数字币中任选KKK(2≤K≤N2≤K≤N2≤K≤N)个,有多种选法,请将每次选择的数字币上的面值累加,然后解决以下两个问题:问题1:累加的和中有多少种不同的结果问题2:累加的和中有多少个不同的合数例如:N=5N=5N=5,K=3K=3K=3,555个数字币上的面值分别为2、1、4、5、32、1、4、5、32、1、4、5、3,任选333个数字币,有101010种选法,将每种选法上的面值累加:2+1+4=7、2+1+5=8、2+1+3=6、2+4+5=11、2+4+3=9、2+5+3=10、1+4+5=10、1+4+3=8、1+5+3=9、4+5+3=122+1+4=7、2+1+5=8、2+1+3=6、2+4+5=11、2+4+3=9、2+5+3=10、1+4+5=10、1+4+3=8、1+5+3=9、4+5+3=122+1+4=7、2+1+5=8、2+1+3=6、2+4+5=11、2+4+3=9、2+5+3=10、1+4+5=10、1+4+3=8、1+5+3=9、4+5+3=12其中累加的和中有777种不同的结果,分别是7、8、6、11、9、10、127、8、6、11、9、10、127、8、6、11、9、10、12;累加的和中有555个不同的合数,分别是8、6、9、10、128、6、9、10、128、6、9、10、12。输入描述第一行输入一个正整数NNN(2≤N≤252≤N≤252≤N≤25),表示数字币的个数。第二行输入NNN个正整数(1≤1≤1≤正整数≤1000≤1000≤1000),表示数字币上的面值,正整数之间以一个英文逗号隔开。第三行输入一个正整数KKK(2≤K≤N2≤K≤N2≤K≤N),表示所要选取的数字币个数。输出描述输出两个整数,分别表示累加的和中不同结果的个数以及累加的结果中不同合数的个数,两个整数之间以一个英文逗号隔开。样例输入52,1,4,5,33123样例输出7,51代码实现n=int(input())a=eval(input())k=int(input())d={}ans1,ans2=0,0b=[0]*n#检查x是否为合数defcheck(x):i=2whilei*i=a[i]:stk.pop()iflen(stk)==0:#左侧没有比a[i]小的数L[i]=-1else[i]=stk[-1]#栈顶就是左侧第一个比a[i]小的位置stk.append(i)#单调栈查找右侧第一个小于a[i]的位置R[i]stk=[]foriinrange(n-1,-1,-1):whilelen(stk)!=0anda[stk[-1]]>=a[i]:stk.pop()iflen(stk)==0:#右侧没有比a[i]小的数R[i]=nelse:R[i]=stk[-1]#栈顶就是右侧第一个比a[i]小的位置stk.append(i)ans=0foriinrange(n):#(L,R)之间一共有R-L-1列ans=max(ans,a[i]*(R[i]-L[i]-1))print(ans)12345678910111213141516171819202122232425262728293031T6.传送门(仅中、高级组)问题描述在一个神奇空间里有NNN个房间,房间从111到NNN编号,每个房间可能有一个或多个传送门,每个传送门都有一个编号,如果相同编号的传送门同时出现在多个房间中,表示这些房间可以互通。给定两个房间的编号AAA和BBB,请找出从房间AAA到达房间BBB最少需要经过几个传送门。例如:N=3N=3N=3,333个房间中传送门的编号分别为:房间111:1,4,61,4,61,4,6;房间222:2,3,4,82,3,4,82,3,4,8;房间333:3,6,93,6,93,6,9。其中房间111和房间222互通,共用444号传送门;房间111和房间333互通,共用666号传送门;房间222和房间333互通,共用333号传送门;当A=1A=1A=1,B=2B=2B=2,从房间111到达房间222,共有两种路线:路线111:从房间111通过444号传送门进入房间222,共经过111个传送门。如下图橙色路线所示。路线222:从房间111通过666号传送门进入房间333,再从房间333通过333号传送门进入房间222,共经过222个传送门;故从房间111到达房间222最少需要经过111个传送门。如下图黑色路线所示。输入描述第一行输入一个正整数NNN(2≤N≤202≤N≤202≤N≤20),表示房间数量。接下来输入NNN行,每行包含多个正整数(1≤1≤1≤正整数≤100≤100≤100),第222行到第N+1N+1N+1行依次表示111到NNN号房间内所有传送门的编号,正整数之间以一个英文逗号隔开。最后一行输入两个正整数AAA和BBB(1≤A≤N,1≤B≤N1≤A≤N,1≤B≤N1≤A≤N,1≤B≤N,且A≠BA≠BA=B),表示两个房间的编号,正整数之间以一个英文逗号隔开。输出描述输出一个整数,表示从房间AAA到达房间BBB最少需要经过几个传送门,如果房间AAA不能到达房间BBB,则输出−1-1−1样例输入31,4,62,3,4,83,6,91,212345样例输出11算法思想首先,输入每个房间的传送门编号,可以计算出任意两个房间是否有传送门相连然后,可以通过BFS求到起点AAA的最短路径。代码实现n=int(input())a=[]foriinrange(n):b=eval(input())a.append(b)A,B=eval(input())#g数组存储两个房间是否有传送门g=[[0]*nfor_inrange(n)]foriinrange(n):forjinrange(i+1,n):forxina[i]:ifxina[j]:#第i个房间和第j个房间有传送门g[i][j]=g[j][i]=1break#bfs求最短路ans=0st=[0]*nq=[]#队列q.append((A,0))#将起点和到起点的距离入队st[A]=1#将起点标记为已访问#只要队列不空,bfs计算到起点的最短路径whilelen(q)!=0:x,d=q.pop(0)if(x==B):#如果到达终点ans=dbreakforiinrange(n):#如果i点已访问,或者x到i之间没有传送门ifst[i]==1org[x][i]==0:continueq.append((i,d+1))print(ans)1234567891011121314151617181920212223242526272829303132333435363738
|
|