基礎練習(非VIP部分) - 藍橋杯(Python實現)

閏年判斷:

題目:

資源限制 時間限制:1.0s   內存限制:256.0MB 問題描述 給定一個年份,判斷這一年是否是閏年。 當如下狀況之一知足時,這一年是閏年: 1. 年份是4的倍數而不是100的倍數; 2. 年份是400的倍數。 其餘的年份都不是閏年。 輸入格式 輸入包含一個整數y,表示當前的年份。 輸出格式 輸出一行,若是給定的年份是閏年,則輸出yes,不然輸出no。 說明:當試題指定你輸出一個字符串做爲結果(好比本題的yes或者no,你須要嚴格按照試題中給定的大小寫,寫錯大小寫將不得分。 樣例輸入 2013 樣例輸出 no 樣例輸入 2016 樣例輸出 yes 數據規模與約定 1990 <= y <= 2050

代碼:

while True: try: y = int(input()) if (y%4 == 0 and y%100 != 0) or (y % 400 == 0): print("yes") else: print("no") except: break
View Code

 

01字串:

題目:

資源限制 時間限制:1.0s   內存限制:256.0MB 問題描述 對於長度爲5位的一個01串,每一位均可能是0或1,一共有32種可能。它們的前幾個是: 00000
00001
00010
00011
00100 請按從小到大的順序輸出這32種01串。 輸入格式 本試題沒有輸入。 輸出格式 輸出32行,按從小到大的順序每行一個長度爲5的01串。 樣例輸出 00000
00001
00010
00011
<如下部分省略>

代碼:

for i in range(0, 32): print("{:05b}".format(i))
法一
for i in range(0, 32): s = str(bin(i)[2: ]) s = '0000' + s print(s[-5: ]) 
法二

補充:

對於Python語言
使用format()函數格式轉換便可
’b’ - 二進制。將數字以2爲基數進行輸出。html

eg: >>> print('{0:b}'.format(3)) 11

參考:

python基礎_格式化輸出(%用法和format用法)python

 

字母圖形:

題目:

資源限制 時間限制:1.0s   內存限制:256.0MB 問題描述 利用字母能夠組成一些美麗的圖形,下面給出了一個例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 這是一個5行7列的圖形,請找出這個圖形的規律,並輸出一個n行m列的圖形。 輸入格式 輸入一行,包含兩個整數n和m,分別表示你要輸出的圖形的行數的列數。 輸出格式 輸出n行,每一個m個字符,爲你的圖形。 樣例輸入 5 7 樣例輸出 ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 數據規模與約定 1 <= n, m <= 26

代碼:

try: s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' n, m = input().split() a = s[0:eval(m)] for i in range(1, eval(n)+1): print(a) a = s[i] + a[0:-1] except: pass
法一
def printf(n ,m): s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    if n >= 1 and m >= 1 and n <= 26 and m <= 26 and n < m: for i in range(n): rear = s[1:i+1] font = s[0:m-i] ss = rear[::-1] + font print(ss[0:m]) n, m = map(int, input().split()) printf(n, m)
法二
n, m = map(int, input().split()) str1 = [] for i in range(m): str1.append(chr(ord('A') + i)) for j in range(len(str1)): print(str1[j], end='') print() for k in range(1, n): str1.insert(0, chr(ord('A') + k)) str1.pop() for p in range(len(str1)): print(str1[p], end='') print()
法三

補充:

chr()函數:

描述: ord() 函數是 chr() 函數(對於 8 位的 ASCII 字符串)的配對函數,它以一個字符串(Unicode 字符)做爲參數,返回對應的 ASCII 數值,或者 Unicode 數值。 語法: ord(c) 參數: c -> 字符。 返回值: 返回值是對應的十進制整數。 eg: >>>ord('a') 97
>>> ord('') 8364
>>>
簡介

ord()函數:

描述: chr() 用一個範圍在 range(256)內的(就是0~255)整數做參數,返回一個對應的字符。 語法: chr(i) 參數: i -> 能夠是10進制也能夠是16進制的形式的數字。 返回值: 返回值是當前整數對應的 ASCII 字符。 eg: >>>print chr(0x30), chr(0x31), chr(0x61) # 十六進制 0 1 a >>> print chr(48), chr(49), chr(97) # 十進制 0 1 a
簡介

以上兩函數做用偏偏相反git

 

數列特徵:

題目:

資源限制 時間限制:1.0s   內存限制:256.0MB 問題描述 給出n個數,找出這n個數的最大值,最小值,和。 輸入格式 第一行爲整數n,表示數的個數。 第二行有n個數,爲給定的n個數,每一個數的絕對值都小於10000。 輸出格式 輸出三行,每行一個整數。第一行表示這些數中的最大值,第二行表示這些數中的最小值,第三行表示這些數的和。 樣例輸入 5
1 3 -2 4 5 樣例輸出 5
-2
11 數據規模與約定 1 <= n <= 10000

代碼:

//利用內置函數
n = int(input()) list1 = list(map(int, input().split())) print(max(list1)) print(min(list1)) print(sum(list1))
法一
//與法一相同,只是另外一種形式:
while True: try: a=int(input()) b=input().split() nums=[int(i) for i in b] print(max(nums))#使用python內置函數很方便,=.= print(min(nums)) print(sum(nums)) except: break
法二

 

查找整數:

題目:

資源限制 時間限制:1.0s   內存限制:256.0MB 問題描述 給出一個包含n個整數的數列,問整數a在數列中的第一次出現是第幾個。 輸入格式 第一行包含一個整數n。 第二行包含n個非負整數,爲給定的數列,數列中的每一個數都不大於10000。 第三行包含一個整數a,爲待查找的數。 輸出格式 若是a在數列中出現了,輸出它第一次出現的位置(位置從1開始編號),不然輸出-1。 樣例輸入 6
1 9 4 8 3 9
9 樣例輸出 2 數據規模與約定 1 <= n <= 1000

代碼:

while True: try: n = int(input()) list1 = list(map(int, input().split())) num = int(input()) if num not in list1: print(-1) for i in range(n): if list1[i] == num: print(i + 1) break except: break
//注意spilt()函數
法一
//使用計數器:
while True: try: count = 0 n = int(input()) nums = list(map(int, input().split())) a = int(input()) for i in range(len(nums)): if a == nums[i]: print(i + 1) count += 1
                break
        if count == 0: print(-1) except: break
法二

 

楊輝三角形:

題目:

資源限制 時間限制:1.0s   內存限制:256.0MB 問題描述 楊輝三角形又稱Pascal三角形,它的第i+1行是(a+b)i的展開式的係數。 它的一個重要性質是:三角形中的每一個數字等於它兩肩上的數字相加。 下面給出了楊輝三角形的前4行:    1
  1 1
 1 2 1
1 3 3 1 給出n,輸出它的前n行。 輸入格式 輸入包含一個數n。 輸出格式 輸出楊輝三角形的前n行。每一行從這一行的第一個數開始依次輸出,中間使用一個空格分隔。請不要在前面輸出多餘的空格。 樣例輸入 4 樣例輸出 1
1 1
1 2 1
1 3 3 1 數據規模與約定 1 <= n <= 34

代碼:

n = int(input()) arr = [] for i in range(n): arr.append([]) for j in range(i + 1): if j == 0 or i == j: arr[i].append(1) else: arr[i].append(arr[i-1][j-1] + arr[i-1][j]) print(" ".join(str(a) for a in arr[i]))
法一
N = [1] n=eval(input()) a=0
while a<n: b = [ str(i) for i in N ] #直接用List Comprehension來把每一個元素轉換成str 或者用b =map(str,N)也能夠實現 print(" ".join(b)) N.append(0) N = [N[i]+N[i-1] for i in range(len(N))] a=a+1
法二
while True: try: n=int(input()) nums=[[0]*n for i in range(n)]#初始化一個n*n的零陣 for i in range(n): for j in range(n): if j==0: nums[i][j]=1
                else: nums[i][j]=nums[i-1][j-1]+nums[i-1][j] if nums[i][j]!=0: print(nums[i][j],end=' ') print() except: break
        
法三
n = input() N = [1] for i in range(int(n)): print(" ".join(str(x) for x in N)) N.append(0) # 列表生成式 N = [N[k] + N[k-1] for k in range(len(N))]
法四

 

特殊的數字:

題目:

資源限制 時間限制:1.0s   內存限制:512.0MB 問題描述   153是一個很是特殊的數,它等於它的每位數字的立方和,即153=1*1*1+5*5*5+3*3*3。編程求全部知足這種條件的三位十進制數。 輸出格式   按從小到大的順序輸出知足條件的三位十進制數,每一個數佔一行。

代碼:

#n = 100
for i in range(100, 1000): ge_wei = i % 10 shi_wei = i//10%10
    bai_wei = i//100%10
    if i == ge_wei*ge_wei*ge_wei + shi_wei*shi_wei*shi_wei + bai_wei*bai_wei*bai_wei: print(i)
法一
for i in range(100, 1000): a = list(str(i)) if i == pow(int(a[0]), 3) + pow(int(a[1]), 3) + pow(int(a[2]), 3): print(i) //
//pow(x,y)表示求解x的y次冪 //pow(x,y,z)表示求解x的y次冪對z取餘後的結果
法二

 

迴文數:

題目:

資源限制 時間限制:1.0s   內存限制:512.0MB 問題描述   1221是一個很是特殊的數,它從左邊讀和從右邊讀是同樣的,編程求全部這樣的四位十進制數。 輸出格式   按從小到大的順序輸出知足條件的四位十進制數。

代碼:

for i in range(1000, 10000): s = str(i) if s[0] == s[-1] and s[1] == s[-2]: print(int(s))
法一
for i in range(1000, 10000): if str(i) == str(i)[::-1]: print(i)
法二
ans = [] for i in range(10, 100): ans.append(str(i) + str(i)[::-1]) for j in sorted(map(int, ans)): print(j)
法三

 

特殊迴文數:

題目:

資源限制 時間限制:1.0s   內存限制:512.0MB 問題描述   123321是一個很是特殊的數,它從左邊讀和從右邊讀是同樣的。   輸入一個正整數n, 編程求全部這樣的五位和六位十進制數,知足各位數字之和等於n 。 輸入格式   輸入一行,包含一個正整數n。 輸出格式   按從小到大的順序輸出知足條件的整數,每一個整數佔一行。 樣例輸入 52 樣例輸出 899998
989989
998899 數據規模和約定   1<=n<=54

代碼:

a = int(input()) for i in range(10000, 1000000): #s = str(i) if i >= 10000 and i <= 99999: s1 = str(i) sum1 = i%10 + i//10%10 + i//100%10 + i//1000%10 + i//10000
        if s1[0] == s1[-1] and s1[1] == s1[-2] and a == sum1: print(int(s1)) else: s2 = str(i) sum2 = i%10 + i//10%10 + i//100%10 + i//1000%10 + i//10000%10 + i//100000
        if s2[0] == s2[-1] and s2[1] == s2[-2] and s2[2] == s2[-3] and a == sum2: print(int(i))
法一
n = int(input('')) for i in range(10000, 1000000): num = str(i) if num == num[::-1]: if n == sum(int(j) for j in num): print(num) //先判斷是否爲迴文數再來求數字之和,由於知足迴文數的數字並很少,所以減小了不少無效的求和運算。
法二
n = int(input('')) x = [] for i in range(100, 1000): if sum(map(int, str(i) + (str(i)[:2])[::-1])) == n: x.append(str(i) + (str(i)[:2])[::-1]) if sum(map(int, str(i) + str(i)[::-1])) == n: x.append(str(i) + str(i)[::-1]) for j in sorted(map(int, x)): print(j) //先保證是迴文數再判斷數字之和是否等於n。根據迴文數左右兩邊對稱的特色,能夠將五位數到六位數的循環轉換成三位數到四位數的循環。
法三
n = int(input()) my_list = [] for i in range(100,1000) : # 若是該數字是6位數 if sum(map(int,str(i) + str(i)[::-1])) == n : my_list.append(str(i) + str(i)[::-1]) # 若是該數字是5位數 if sum(map(int,str(i) + str(i)[:2][::-1])) == n : my_list.append(str(i) + str(i)[:2][::-1]) for i in sorted(map(int,my_list)) : # 排序 print(i) //用時:only31ms
法四
while True: try: n=int(input()) for i in range(10000,1000000): a=str(i) b=0
            if a==a[::-1]:#這裏的a[::-1]表示把字符串a倒序 for j in a: b+=int(j) if b==n: print(a) except: break
法五

 

十進制轉十六進制:

題目:

資源限制 時間限制:1.0s   內存限制:512.0MB 問題描述   十六進制數是在程序設計時常常要使用到的一種整數的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16個符號,分別表示十進制數的0至15。
  十六進制的計數方法是滿16進1,因此十進制數16在十六進制中是10,而十進制的17在十六進制中是11,以此類推,十進制的30在十六進制中是1E。   給出一個非負整數,將它表示成十六進制的形式。 輸入格式   輸入包含一個非負整數a,表示要轉換的數。
0<=a<=2147483647 輸出格式   輸出這個整數的16進製表示 樣例輸入 30 樣例輸出 1E

代碼:

n = input() m = hex(int(n)) m = m[2:] m = m.upper() print(m)
法一
h = int(input().strip()) d = hex(h) #十進制轉十六進制 d = d[2:] #去掉前面的不須要的兩位 print(d.upper())
法二
print("{0:X}".format(int(input())))
法三

 

十六進制轉十進制:

題目:

資源限制 時間限制:1.0s   內存限制:512.0MB 問題描述   從鍵盤輸入一個不超過8位的正的十六進制數字符串,將它轉換爲正的十進制數後輸出。   注:十六進制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。 樣例輸入 FFFF 樣例輸出 65535

代碼:

a = input() B = int(a,16) print(B)
法一
a=input() s=0
for i in range(len(a)): if a[i].isdigit(): s=s+(ord(a[i])-ord('0'))*pow(16,len(a)-i-1) elif a[i].isalpha(): s=s+(ord(a[i])-ord('A')+10)*pow(16,len(a)-i-1) print(s)
法二
while True: try: s = str(input())[::-1] para = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8, '9':9,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15} result = para[s[0]] for i in range(1, s.__len__()): temp = para[s[i]]*16**i result += temp print(result) except: break
法三

 

十六進制轉八進制:

題目:

資源限制 時間限制:1.0s   內存限制:512.0MB 問題描述   給定n個十六進制正整數,輸出它們對應的八進制數。 輸入格式   輸入的第一行爲一個正整數n (1<=n<=10)。   接下來n行,每行一個由0~9、大寫字母A~F組成的字符串,表示要轉換的十六進制正整數,每一個十六進制數長度不超過100000。 輸出格式   輸出n行,每行爲輸入對應的八進制正整數。   【注意】   輸入的十六進制數不會有前導0,好比012A。   輸出的八進制數也不能有前導0。 樣例輸入   2
  39   123ABC 樣例輸出   71
  4435274   【提示】   先將十六進制數轉換成某進制數,再由某進制數轉換成八進制。

代碼:

n=int(input()) for i in range(n): if n<=10: s=input()#全部輸入默認字符串 if len(s)<=100000: res_1=int(s,16) res_2=oct(res_1) print(res_2[2:])
法一
n = input() m = [] for i in range(0,int(n)): m.append(input()) for i in range(0,int(n)): result = oct(int(m[i],16)) result = result[2:] print(result)
法二

補充:

在python中二進制用0b加相應數字來表示,8進制用0o加相應數字來表示,16進制用0x加相應數字來表示。即: #其餘進制轉換二進制# >>> bin(2) #十進制轉換二進制# '0b10'
>>> bin(0o10) #八進制轉換二進制# '0b1000'
>>> bin(0xf) #十六進制轉換二進制# '0b1111' #其餘進制轉換爲八進制# >>> oct(0b101) '0o5'
>>> oct(0xf) '0o17'
>>> oct(0o123) '0o123' #其餘進制轉換爲十六進制# >>> hex(0o10) '0x8'
>>> hex(3) '0x3'
>>> hex(0b111) '0x7' #其餘進制轉換爲十進制# >>> int(0o10) 8
>>> int(0xf) 15
>>> int(0b10) 2
進制轉換

 

數列排序:

題目:

資源限制 時間限制:1.0s   內存限制:512.0MB 問題描述   給定一個長度爲n的數列,將這個數列按從小到大的順序排列。1<=n<=200 輸入格式   第一行爲一個整數n。   第二行包含n個整數,爲待排序的數,每一個整數的絕對值小於10000。 輸出格式   輸出一行,按從小到大的順序輸出排序後的數列。 樣例輸入 5
8 3 6 4 9 樣例輸出 3 4 6 8 9

代碼:

loop = int(input()) a = list(map(int,input().split())) a.sort() for i in a: if loop == 1: print('',end=str(i)) break print(str(i),end=' ') loop -= 1
法一
//冒泡排序
x = int(input()) lst = list(map(int,input().split())) for i in range(0,len(lst)): for j in range(0,len(lst)-i-1): if lst[j]>lst[j+1]: (lst[j],lst[j+1])=(lst[j+1],lst[j]) for a in range(x): print(lst[a],end=' ')
法二
x = int(input()) if x >= 1 & x <= 200: list1 = list(map(int, input().split())) list1.sort() for num in range(0, x): if abs(list1[num]) < 10000: print(list1[num], end=" ")
法三

 

參考:

https://blog.csdn.net/harry______/article/details/109142479編程

http://www.javashuo.com/article/p-oiaocqgm-cd.htmlapp

相關文章
相關標籤/搜索