发现牛客网的考研题不错,赶紧刷刷
题目:
#下面这一段用一个txt来保存input的信息来模拟input.最后提交代码时候删除这一段即可. a9999=open('1.txt','r') def input(): return a9999.readline() while 1: try: a=int(input()) b=int(input()) if b==0: c='降序' else: c='升序' out=[] if b==0: for i in range((a)): tmp=input().split() name=tmp[0] score=tmp[1] out.append((name,score)) out2=[] while len(out)>0: i=0 for j in range(len(out)): if int(out[j][1])>int(out[i][1]): i=j out2.append(out[i]) out.pop(i) for i in range(len(out2)): print(out2[i][0]+' '+out2[i][1]) else: for i in range((a)): tmp=input().split() name=tmp[0] score=tmp[1] out.append((name,score)) out2=[] while len(out)>0: i=0 for j in range(len(out)): if int(out[j][1])<int(out[i][1]): i=j out2.append(out[i]) out.pop(i) for i in range(len(out2)): print(out2[i][0]+' '+out2[i][1]) except: break
View Code
''' 题目描述 输入n个整数,依次输出每个数的约数的个数 输入描述: 输入的第一行为N,即数组的个数(N<=1000) 接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000) 当N=0时输入结束。 输出描述: 可能有多组输入数据,对于每组输入数据, 输出N行,其中每一行对应上面的一个数的约数的个数。 ''' #下面这一段用一个txt来保存input的信息来模拟input.最后提交代码时候删除这一段即可. a9999=open('1.txt','r') def input(): return a9999.readline() import math while 1: try: a=int(input()) b=[int(i) for i in input().split()] def duoshaogeyueshu(a): if a==1: return 1 count=0 for ii in range(1,a): if ii*ii==a: count+=1 continue if ii*ii>a: break if a%ii==0: count+=2 return count out=[] for i in range(len(b)): print(duoshaogeyueshu(b[i])) except: break
拆包打印法:
#拆包打印法: s=['34','324'] print(*[w for w in s], sep=' ', end='') #sep是分割,end是结尾
''' [编程题] 光棍指数 时间限制:1秒 空间限制:65536K 对于一个正整数,我们认为它的光棍指数是它二进制表示下1的个数。 通常认为光棍指数越高,这个数就越孤单。那么问题来了,对于给定的[a,b]区间中。最孤单的数字是谁呢? 如果光棍指数相同,最孤单的就是最小的那个数。 输入描述: 第一行一个整数 T (1≤T≤10^4),表示问题数。 接下来 T 行,每行两个整数 a,b (0≤a≤b≤2^31−1)。数据之间用一个空格分隔。 输出描述: 对于每个问题,输出一行 Case x: y,其中 x 是问题编号,从 1 开始,y 是答案 输入例子1: 2 0 14 100 1000 输出例子1: Case 1: 7 Case 2: 511 ''' def main(a,b):#返回a,b之见的最大孤独数 tmp=bin(a)[2:] a=tmp c=[] while int(a,2)<=b: if '0' in a: index=a[::-1].index('0') out=a[::-1] chuli=out[:index]+'1'+out[index+1:] a=chuli[::-1] c.append(a) if int(a,2)>b: break else: a=a+'1' c.append(a) if int(a,2)>b: break return int(c[-2],2) a=int(input()) for i in range(a): tmp=[int(i) for i in input().split()] out=main(tmp[0],tmp[1]) print('Case '+str(i+1)+': '+str(out))
leecode
30. 与所有单词相关联的字串:记忆体递归即可
class Solution: def findSubstring(self, s, words): """ :type s: str :type words: List[str] :rtype: List[int] """ if s=='' and words==[]: return [] if s!='' and words==[]: return [] memo={} def panding(tmp,words): if (tmp,tuple(words)) in memo: return memo[(tmp,tuple(words))] if words==[]: return True for i in range(len(words)): index=i i=words[i] if tmp[:len(i)]==i: a=words.copy() a.pop(index) memo[(tmp,tuple(words))]=panding(tmp[len(i):],a) return panding(tmp[len(i):],a) return False a='' for i in range(len(words)): a+=words[i] num=len(a) out=[] for i in range(0,len(s)-num+1): tmp=s[i:i+num] if panding(tmp,words): out.append(i) return out
leecode31. 下一个排列 字典序经典题目
class Solution: #思路是:先从后往前找.比如123,他的后2位可以变大,就让后两位做变换.变换方法是:2找到后面比2大的数,跟2位置交换.之后这个位置后面的数做降序排列即可. def nextPermutation(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ #先找到可以交换的位置. def main(nums): for i in range(len(nums)-1,-1,-1): for j in range(len(nums)-1,i,-1): if nums[j]>nums[i]: nums[i],nums[j]=nums[j],nums[i] out=nums[:i+1]+sorted(nums[i+1:]) return out return sorted(nums) out=main(nums) for i in range(len(nums)): nums[i]=out[i]
41. 缺失的第一个正数 用set计算
class Solution: def firstMissingPositive(self, nums): """ :type nums: List[int] :rtype: int """ if nums==[]: return 1 a=max(nums) tmp=range(1,a+2) tmp=set(tmp) nums=set(nums) print(tmp) tmp=tmp-nums print(tmp) tmp=list(tmp) return min(tmp)