发现牛客网的考研题不错,赶紧刷刷

  

 

题目:

#下面这一段用一个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

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
View Code

 拆包打印法:

#拆包打印法:
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^311)。数据之间用一个空格分隔。


输出描述:
对于每个问题,输出一行 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))
   
View Code

 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
View Code

 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]
View Code

 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)
View Code

 

posted on 2018-07-08 21:20  张博的博客  阅读(210)  评论(0编辑  收藏  举报

导航