一些题目吧

1.判断一个输入用空格分开,前面的字符串中含有多少个后面的字符串

s='ABCDEF A'
s=s.split()
s1=s[0]
s2=s[1]
print(s[0])
print(s[1])
num=0
for i in s1:
    if i==s2:
        num=num+1
print(num)

2.爬楼梯方法。每次只能爬一阶、二阶、三阶,最多有多少种爬法

def step(s):
    if s==1:
        return 1
    elif s==2:
        return 2
    elif s==3:
        return 4
    else:
        return step(s-1)+step(s-2)+step(s-3)
print(step(5))

3.环状涂色,环分成n份,有m种颜色,相邻不同,有多少种涂法

global m
m=3
def ColorRing(n):
    if n==1:
        return m
    elif n==2:
        return m*(m-1)
    else:
        return m*(m-1)**(n-1)-ColorRing(n-1)
print(ColorRing(4))

4.从n个里面选m个

def pick(data, temp, result):    
    for i in range(len(data)):
        print("i:",i)
        t = data[i]
        temp.append(data[i])
        del(data[i])
        pick(data, temp, result)
        data.insert(i,t)
        del(temp[len(temp)-1])    
    tt = temp.copy()
    tt.sort() #list
    if len(tt) == m and tt not in result:
        result.append(tt)
        #print("result:",result)
        return
        
if __name__ == '__main__':
     n = 3
     global m
     m = 2
     data = list(range(n)) 
     print(data)
     temp = []
     result = []
     pick(data, temp, result)
     print(result)
     print(len(result))

直接算个数

n=3
m=2

def pick(n,m):
    if m==1:
        return n
    else
        return int(n*pick(n-1,m-1)/m)
print(pick(n,m))

更直观的方法

n=3
m=2
def pick(n,m):
    if n<m:
        return 0
    elif m==1:
        return n
    else:
        return pick(n-1,m-1)+pick(n-1,m)  #一个是,当前取,另一个是当前不取
print(pick(n,m))

5.就是在第二段音频中找到一个长度和第一段音频相等且是连续的子序列,使得它们的 difference 最小。两段等长音频的difference 定义为:
difference = SUM(a[i] - b[i])2(1 ≤ i ≤ n),其中SUM()表示求和
其中 n 表示序列长度,a[i], b[i]分别表示两段音频的音高。difference的最小值是多少?数据保证第一段音频的长度小于等于第二段音频的长度。

输入:
第一行一个整数n(1 ≤ n ≤ 1000),表示第一段音频的长度。
第二行n个整数表示第一段音频的音高(0 ≤ 音高 ≤ 1000)。
第三行一个整数m(1 ≤ n ≤ m ≤ 1000),表示第二段音频的长度。
第四行m个整数表示第二段音频的音高(0 ≤ 音高 ≤ 1000)。
def dif(a,b):
    SUM=0
    for i in range(0,len(a)):
        #print len(a)
        SUM=SUM+(int(a[i])-int(b[i]))**2
    return SUM

voc1=int(raw_input())
fcVoc1=list(map(int,raw_input().split(' ')))
voc2=int(raw_input())
fcVoc2=list(map(int,raw_input().split(' ')))
#print fcVoc2

if voc1<=voc2:
    i=0
    MIN=dif(fcVoc1,fcVoc2[i:i+voc1])
    for i in range(1,voc2-voc1+1,1):
        temp=dif(fcVoc1,fcVoc2[i:i+voc1])
        if temp<MIN:
            MIN=temp
print(MIN)

6.比赛有 n 个人参加(其中 n 为2的幂),每个参赛者根据资格赛和预赛、复赛的成绩,会有不同的积分。比赛采取锦标赛赛制,分轮次进行,设某一轮有m 个人参加,那么参赛者会被分为 m/2 组,每组恰好 2 人,m/2 组的人分别厮杀。我们假定积分高的人肯定获胜,若积分一样,则随机产生获胜者。获胜者获得参加下一轮的资格,输的人被淘汰。重复这个过程,直至决出冠军。

import math
n=int(raw_input())
score=list(map(int,raw_input().split(' ')))
low=1
for i in range(1,n):
    if score[i]<=score[0]:
        low=low+1
del score
low=min(n/2,low)
win=0
while low:
    low=math.floor(low/2)
    if low:
        win=win+1
print(win)

7.字符匹配

Symbols={')':'(',']':'[','}':'{','>':'<'}
Sym_L,Sym_R=Symbols.values(),Symbols.keys()
string="3 * {3+ [4 - 6}]"
flag='true'
arr=[]
for c in string:
    if c in Sym_L:
        arr.append(c)
    elif c in Sym_R:
        if arr and arr[-1]==Symbols[c]:
            arr.pop()
        else:
            flag='false'
print(flag)  

8.P为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x 的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内)

如下图:实心点为满足条件的点的集合。请实现代码找到集合 P 中的所有 ”最大“ 点的集合并输出。

import sys
num=int(sys.stdin.readline().split('\n')[0])
arr=[]
for i in range(num):
    indata=sys.stdin.readline().split()
    corX,corY=int(indata[0]),int(indata[1])
    arr.append([corX,corY])
arr=sorted(arr,reverse = True)
flag=[arr[0]]
i=1
while i < num:
    if arr[i][1]>flag[-1][1]:
        flag.append(arr[i])  
    i+=1
print(flag)
for i in range(len(flag)-1,-1,-1):
    print(flag[i][0],flag[i][1])
8.一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。
有n 个学生从长廊穿过。第一个学生把号码凡是1 的倍数的电灯的开关拉一下;接着第二
个学生把号码凡是2 的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3 的倍数的
电灯的开关拉一下;如此继续下去,最后第n 个学生把号码凡是n 的倍数的电灯的开关拉
一下。n 个学生按此规定走完后,长廊里电灯有几盏亮着。

注:电灯数和学生数一致。

n=100
light = list(range(1,n+1)) 
print(light)

number=str(123421)
print(number)
numlist=[int( number[item: item+1] ) for item in range(0, len(number))]
print(numlist)

mid=int(len(numlist)/2)
#print(mid)
flag='true'
for i in range(0,mid):
    if numlist[i]!=numlist[len(numlist)-i-1]:
        flag='false'
        break
print(flag)

lightnew = list(n*[0])print(lightnew)for i in range(0,n): divisor = 0 for j in range(1,n+1): if light[i]%j == 0: divisor=divisor+1 if (divisor%2)==0: lightnew[i]=0 else: lightnew[i]=1 print('i,d,new',i+1,divisor,lightnew[i])print(lightnew.count(1))

9.回文数

number=str(123421)
print(number)
numlist=[int( number[item: item+1] ) for item in range(0, len(number))]
print(numlist)

mid=int(len(numlist)/2)
#print(mid)
flag='true'
for i in range(0,mid):
    if numlist[i]!=numlist[len(numlist)-i-1]:
        flag='false'
        break
print(flag)

10.输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。(其中最大值与最小值可能有多个)

array=[3,3,5,3,6,9,7,9]
max=array[len(array)-1]
min=array[0]
for i in range(0,len(array)):
    if array[i]>max:
        max=array[i]
    if array[i]<min:
        min=array[i]
print(max,min)
temp=0
for i in range(0,len(array)):
    if array[i]<max and array[i]>min:
        temp=temp+1
print(temp)
11.10 个学生考完期末考试评卷完成后,A 老师需要划出及格线,要求如下:
(1) 及格线是10 的倍数;
(2) 保证至少有60%的学生及格;

(3) 如果所有的学生都高于60 分,则及格线为60 分

#stu = list(eval(input()))
stu=[10,30,40,20,50,88,97,74,99,85]
#stu=[60,70,80,90,60,70,80,90,80,90]
passline=0
for k in range(0,len(stu)):
    if stu[k]/10<6:
        break
    else:
        passline=6

if passline==0:
    i=10
    passstu=0
    while(passstu/len(stu)<0.6):
        passstu=0
        #print('i:',i)
        for j in range(0,len(stu)):
            if stu[j]>=i*10:
                passstu=passstu+1 
        i=i-1
        #print(passstu)
    passline=i+1
        
print(passline*10)

12.快排

def parttion(s,left,right):
    key=s[left]
    low=left
    hight=right
    while low<hight:
        print('low,hight0',s[low],s[hight])
        while low<hight and s[hight]>=key:
            hight=hight-1
        print('low,hight1',s[low],s[hight])
        s[low]=s[hight]
        while low<hight and s[low]<=key :
            low=low+1
        s[hight]=s[low]
        print('low,hight2',s[low],s[hight])
    s[low]=key
    key=s[low]
    #s[low],key=key,s[low]
    return low

def quickSort(s, left, right):
    if left < right:
        p=parttion(s, left, right)
        quickSort(s,left,p-1)
        quickSort(s,p+1,right)
    return s
s = [6, 8, 1, 4, 3, 9, 5]
print(s)
s2 = quickSort(s, left=0, right=len(s)-1)
print(s2)

13.冒泡排序

#冒泡排序
L = [3, 7, 2, 8, 1, 6, 4]
for i in range(len(L)-1):
    for j in range(len(L)-1-i):
        if (L[j] > L[j+1]):
            temp=L[j]
            L[j]=L[j+1]
            L[j+1]=temp
print(L)'''

'''
冒泡排序
L2 = [3, 7, 2, 8, 1, 6, 4]
listlen = len(L2)
while(listlen):
    for i in range(listlen-1):
        if (L2[i]>L2[i+1]):
            temp=L2[i]
            L2[i]=L2[i+1]
            L2[i+1]=temp
    listlen=listlen-1
print(L2)'''

L3 = [3, 7, 2, 8, 1, 6, 4]
for i in range(len(L3)-1):
    minl=i
    for j in range(i+1,len(L3)):
        if L3[minl] > L3[j]:
            minl=j
            temp = mindata
            mindata = L3[j]
            L3[j] = temp
print(L3)

猜你喜欢

转载自blog.csdn.net/yiyao8236/article/details/79593480
今日推荐