藍(lán)橋杯 基礎(chǔ)訓(xùn)練 Python版 0

呃,是不是這篇文章應(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())
if\quadx%4==0\quadand\quadx%100!=0\quador\quadx%400==0:
\quadprint(’yes‘)
else:
\quadprint('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):
\quadprint("{: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):

\quad for a in range(b):

\quad \quad print(chr(65+c),end='')

\quad \quadc-=1

\quad \quadd-=1

\quad\quadif(d==0):

\quad \quad \quadbreak

\quadfor a in range(m-b):

\quad \quadprint(chr(65+a),end='')

\quadprint('')

\quadc=b=b+1

\quadd=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:

\quads=0

\quada=[int(i) for i in input().split()]

\quadmax,min=a[0],a[0]

\quadfor i in range(n):

\quadif a[i]>max:

\quad\quadmax=a[i]

\quadif a[i]<min:

\quad\quad min=a[i]

\quads+=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:

\quadprint('-1')

else:

\quadfor i in range(n):

\quad \quad x=A[i]

\quad\quad if x==wtf:

\quad\quad\quad print(i+1)

\quad\quad\quadbreak

楊輝三角形

問(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):
\quadfor i in range(len(N)):
\qquadif i == len(N)-1:
\qquad\quadprint(N[i])
\qquadelse:
\qquad \quadprint(N[i],end=' ')
\quadN.append(0)
\quadN = [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):
\quada=i//100
\quadb=i//10-a*10
\quadc=i%10
\quadd=a**3+b**3+c**3
\quadif d==i:
\qquadprint(i)

回文字

問(wèn)題描述

1221是一個(gè)非常特殊的數(shù),它從左邊讀和從右邊讀是一樣的,編程求所有這樣的四位十進(jìn)制數(shù)。

解決方法

for i in range(1000,10000):
\quada=i//1000
\quadb=i//100%10
\quadc=i%100//10
\quadd=i%10
\quadif a==d and b==c :
\qquadprint(i)

特殊回文字

問(wèn)題描述

123321是一個(gè)非常特殊的數(shù),它從左邊讀和從右邊讀是一樣的。
輸入一個(gè)正整數(shù)n, 編程求所有這樣的五位和六位十進(jìn)制數(shù),滿足各位數(shù)字之和等于n 。

解決方法

i=int(input())
for a in range(1,10):
\quadfor b in range(10):
\qquadfor c in range(10):
\quad\qquadif a*2+b*2+c==i :
\qquad\qquadprint(a+b*10+c*100+b*1000+a*10000)
for a in range(1,10):
\quadfor b in range(10):
\qquadfor c in range(10):
\quad\qquadif a*2+b*2+c*2==i :
\qquad\qquadprint(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):
\quadfor b in range(10):
\qquadfor c in range(10):
\quad\qquadif a*2+b*2+c==i :
\qquad\qquadA.append(a+b*10+c*100+b*1000+a*10000)

\quad\qquadif a*2+b*2+c*2==i :
\qquad\qquadB.append(a+b*10+c*100+c*1000+b*10000+a*100000)

for i in range(len(A)):

\quadprint(A[i])

for i in range(len(B)):

\quadprint(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):
\quadprint('{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):
\quadfor j in range(len(list)-i-1):
\qquadif list[j] > list[j + 1]:
\qquad\qquadlist[j], list[j + 1] = list[j + 1], list[j]
for i in range(len(list)):
\quadprint(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):
\quadfor i in range(len(string1)):
\qquadif 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]):
\qquad\quadprint("3")
\qquad\quadexit(0)
\quad\quadelif ord(string1[i])!=ord(string2[i]):
\qquad\quadprint("4")
\qquad\quadexit(0)
\quad\quadprint("2")
else:
\quadprint("1")

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容