呃,是不是這篇文章應(yīng)該叫 藍(lán)橋杯之從入門到放棄 ?
感謝藍(lán)橋杯,讓我學(xué)了Python。但是由于近期種種事情,已經(jīng)打算放棄藍(lán)橋杯了,畢竟真的沒(méi)有時(shí)間學(xué)算法和數(shù)據(jù)結(jié)構(gòu)了。雖說(shuō)數(shù)據(jù)結(jié)構(gòu)不會(huì)做,但反過(guò)頭來(lái)看之前寫的Python的練習(xí)題,慘不忍睹……這些練習(xí)題重新做一遍好了。
大概,就這樣。
閏年判斷
問(wèn)題描述
給定一個(gè)年份,判斷這一年是不是閏年。
當(dāng)以下情況之一滿足時(shí),這一年是閏年:
1、年份是4的倍數(shù)而不是100的倍數(shù);
2、年份是400的倍數(shù)。
其他的年份都不是閏年。
解決方法
x=int(input())
ifx%4==0
and
x%100!=0
or
x%400==0:
print(’yes‘)
else:
print('no')
01字串
問(wèn)題描述
對(duì)于長(zhǎng)度為5位的一個(gè)01串,每一位都可能是0或1,一共有32種可能。它們的前幾個(gè)是:
00000
00001
00010
00011
00100
請(qǐng)按從小到大的順序輸出這32種01串。
解決方法
for i in range(32):
print("{:05b}".format(i))
注:整型數(shù)字轉(zhuǎn)換成2進(jìn)制數(shù)字,此處0為補(bǔ)位字符,5為位數(shù)。
字母圖像
問(wèn)題描述
利用字母可以組成一些美麗的圖形,下面給出了一個(gè)例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
這是一個(gè)5行7列的圖形,請(qǐng)找出這個(gè)圖形的規(guī)律,并輸出一個(gè)n行m列的圖形。
解決方法
A=list(map(int,input().split()))
n=A[0]
m=A[1]
b=0
for i in range(1,n+1):
for a in range(b):
print(chr(65+c),end='')
c-=1
d-=1
if(d==0):
break
for a in range(m-b):
print(chr(65+a),end='')
print('')
c=b=b+1
d=m
注:網(wǎng)上全是字符串切割,但是我感覺(jué)打26個(gè)字母的字符串(ABCDEFG……)很麻煩,想到了ASCII 碼轉(zhuǎn)換的方法,但是這個(gè)方法如果 m或n >26 ,會(huì)出現(xiàn)bug ,慶幸的是,他的測(cè)試全都是小于26的,就這樣了。
數(shù)列特征
問(wèn)題描述
給出n個(gè)數(shù),找出這n個(gè)數(shù)的最大值,最小值,和。
解決方法
n=int(input())
if n>=1 and n<=10000:
s=0
a=[int(i) for i in input().split()]
max,min=a[0],a[0]
for i in range(n):
if a[i]>max:
max=a[i]
if a[i]<min:
min=a[i]
s+=a[i]
print(max)
print(min)
print(s)
注:冒泡算法,題目中給出了范圍,但是測(cè)試中并沒(méi)有超出這個(gè)范圍的數(shù)字,網(wǎng)上其他也都沒(méi)有限定n的范圍。但我感覺(jué)吧,有 if n>=1 and n<=10000: 這一句比較嚴(yán)謹(jǐn)……
查找整數(shù)
問(wèn)題描述
給出一個(gè)包含n個(gè)整數(shù)的數(shù)列,問(wèn)整數(shù)a在數(shù)列中的第一次出現(xiàn)是第幾個(gè)。
解決方法
n=int(input())
A=list(map(int,input().split()))
wtf=int(input())
if wtf==0:
print('-1')
else:
for i in range(n):
x=A[i]
if x==wtf:
print(i+1)
break
楊輝三角形
問(wèn)題描述
楊輝三角形又稱Pascal三角形,它的第i+1行是(a+b)i的展開式的系數(shù)。
它的一個(gè)重要性質(zhì)是:三角形中的每個(gè)數(shù)字等于它兩肩上的數(shù)字相加。
下面給出了楊輝三角形的前4行:
1
1 1
1 2 1
1 3 3 1
給出n,輸出它的前n行。
解決方法
n = int(input())
N = [1]
for m in range(n):
for i in range(len(N)):
if i == len(N)-1:
print(N[i])
else:
print(N[i],end=' ')
N.append(0)
N = [N[k] + N[k-1] for k in range(i+2)]
特殊的數(shù)字
問(wèn)題描述
153是一個(gè)非常特殊的數(shù),它等于它的每位數(shù)字的立方和,即153=1*1*1+5*5*5+3*3*3。編程求所有滿足這種條件的三位十進(jìn)制數(shù)。
解決方法
for i in range(100,999):
a=i//100
b=i//10-a*10
c=i%10
d=a**3+b**3+c**3
if d==i:
print(i)
回文字
問(wèn)題描述
1221是一個(gè)非常特殊的數(shù),它從左邊讀和從右邊讀是一樣的,編程求所有這樣的四位十進(jìn)制數(shù)。
解決方法
for i in range(1000,10000):
a=i//1000
b=i//100%10
c=i%100//10
d=i%10
if a==d and b==c :
print(i)
特殊回文字
問(wèn)題描述
123321是一個(gè)非常特殊的數(shù),它從左邊讀和從右邊讀是一樣的。
輸入一個(gè)正整數(shù)n, 編程求所有這樣的五位和六位十進(jìn)制數(shù),滿足各位數(shù)字之和等于n 。
解決方法
i=int(input())
for a in range(1,10):
for b in range(10):
for c in range(10):
if a*2+b*2+c==i :
print(a+b*10+c*100+b*1000+a*10000)
for a in range(1,10):
for b in range(10):
for c in range(10):
if a*2+b*2+c*2==i :
print(a+b*10+c*100+c*1000+b*10000+a*100000)
注:此處重復(fù)運(yùn)算很多,我就想如果把兩個(gè)合并一下,五位和六位存入兩個(gè)列表,最后分別打印,是不是會(huì)快一些。就像這樣:
i=int(input())
A=[]
B=[]
for a in range(1,10):
for b in range(10):
for c in range(10):
if a*2+b*2+c==i :
A.append(a+b*10+c*100+b*1000+a*10000)
if a*2+b*2+c*2==i :
B.append(a+b*10+c*100+c*1000+b*10000+a*100000)
for i in range(len(A)):
print(A[i])
for i in range(len(B)):
print(B[i])
你猜怎么著,比之前CPU使用時(shí)間長(zhǎng)一倍……還是最開始的那個(gè)吧。分析一下原因:列表 A 和 B 太長(zhǎng)了……
十進(jìn)制轉(zhuǎn)十六進(jìn)制
問(wèn)題描述
十六進(jìn)制數(shù)是在程序設(shè)計(jì)時(shí)經(jīng)常要使用到的一種整數(shù)的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16個(gè)符號(hào),分別表示十進(jìn)制數(shù)的0至15。十六進(jìn)制的計(jì)數(shù)方法是滿16進(jìn)1,所以十進(jìn)制數(shù)16在十六進(jìn)制中是10,而十進(jìn)制的17在十六進(jìn)制中是11,以此類推,十進(jìn)制的30在十六進(jìn)制中是1E。給出一個(gè)非負(fù)整數(shù),將它表示成十六進(jìn)制的形式。
解決方法
print('{0:X}'.format(int(input())))
注:這幾個(gè)進(jìn)制轉(zhuǎn)換讓我更加堅(jiān)信了 Python天下第一。
十六進(jìn)制轉(zhuǎn)十進(jìn)制
問(wèn)題描述
從鍵盤輸入一個(gè)不超過(guò)8位的正的十六進(jìn)制數(shù)字符串,將它轉(zhuǎn)換為正的十進(jìn)制數(shù)后輸出。
注:十六進(jìn)制數(shù)中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。
解決方法
print('{}'.format(int(input(),16)))
十六進(jìn)制轉(zhuǎn)八進(jìn)制
問(wèn)題描述
給定n個(gè)十六進(jìn)制正整數(shù),輸出它們對(duì)應(yīng)的八進(jìn)制數(shù)。
解決方法
m=int(input())
for i in range(m):
print('{0:o}'.format(int(input(),16)))
數(shù)列排序
問(wèn)題描述
給定一個(gè)長(zhǎng)度為n的數(shù)列,將這個(gè)數(shù)列按從小到大的順序排列。1<=n<=200
解決方法
n=int(input())
list=list(map(int,input().split( )))
for i in range(n-1):
for j in range(len(list)-i-1):
if list[j] > list[j + 1]:
list[j], list[j + 1] = list[j + 1], list[j]
for i in range(len(list)):
print(list[i],end=' ')
注:冒泡
時(shí)間轉(zhuǎn)換
問(wèn)題描述
給定一個(gè)以秒為單位的時(shí)間t,要求用“<H>:<M>:<S>”的格式來(lái)表示這個(gè)時(shí)間。<H>表示時(shí)間,<M>表示分鐘,而<S>表示秒,它們都是整數(shù)且沒(méi)有前導(dǎo)的“0”。例如,若t=0,則應(yīng)輸出是“0:0:0”;若t=3661,則輸出“1:1:1”。
解決方法
ts=int(input())
h=ts//3600
m=ts//60-h*60
s=ts-h*3600-m*60
print('{}:{}:{}'.format(h,m,ts))
字符串對(duì)比
問(wèn)題描述
給定兩個(gè)僅由大寫字母或小寫字母組成的字符串(長(zhǎng)度介于1到10之間),它們之間的關(guān)系是以下4中情況之一:
1:兩個(gè)字符串長(zhǎng)度不等。比如 Beijing 和 Hebei
2:兩個(gè)字符串不僅長(zhǎng)度相等,而且相應(yīng)位置上的字符完全一致(區(qū)分大小寫),比如 Beijing 和 Beijing
3:兩個(gè)字符串長(zhǎng)度相等,相應(yīng)位置上的字符僅在不區(qū)分大小寫的前提下才能達(dá)到完全一致(也就是說(shuō),它并不滿足情況2)。比如 beijing 和 BEIjing
4:兩個(gè)字符串長(zhǎng)度相等,但是即使是不區(qū)分大小寫也不能使這兩個(gè)字符串一致。比如 Beijing 和 Nanjing
編程判斷輸入的兩個(gè)字符串之間的關(guān)系屬于這四類中的哪一類,給出所屬的類的編號(hào)。
解決方法
string1=input()
string2=input()
if len(string1)==len(string2):
for i in range(len(string1)):
if ord(string1[i])==ord(string2[i])+32 or ord(string1[i])==ord(string2[i])-32 or ord(string1[i])+32 == ord(string2[i]) or ord(string1[i])-32 == ord(string2[i]):
print("3")
exit(0)
elif ord(string1[i])!=ord(string2[i]):
print("4")
exit(0)
print("2")
else:
print("1")