藍橋杯-練習題目(1-20)


1.題目1:輸入A、B,輸出A+B。

#input: 12 45
#output:57

c = input().split() #將輸入以空格為分隔符返回一個字符串列表
a,b = map(int,c)
sum1 = a + b
print(sum1)
求和

2.題目2:求1+2+3+...+n的值。

#input:4
#output:10
print(sum(range(1,int(input()) + 1)))
求和

3.題目3:給定圓的半徑r,求圓的面積。

#input:4
#output:50.2654825

import math
print(round(math.pi*float(input())**2,7))
求圓的面積

4.題目4:

Fibonacci數列的遞推公式為:Fn=Fn-1+Fn-2,其中F1=F2=1。

當n比較大時,Fn也非常大,現在我們想知道,Fn除以10007的余數是多少。

#input:10
#output:55
import numpy as np
n = int(input())
a = np.zeros((1,n),dtype = "int")
a[0][0] = 1

for i in range(1,n):
    a[0][i] = a[0][i-1] + a[0][i-2]
print(a[0][n-1]%10007)

'''
def fei(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fei(n-1)%10007 + fei (n-2)%10007

n = int(input())#項數
print(fei(n))
'''
Fibonacci

5.題目5:

給定一個年份,判斷這一年是不是閏年。

當以下情況之一滿足時,這一年是閏年:

1. 年份是4的倍數而不是100的倍數;

2. 年份是400的倍數。

其他的年份都不是閏年。

#input:2013
#output:no

year = int(input())
if (year>=1990 and year<=2050) and (year%400 == 0 or (year%4 == 0 and year%100 !=0)):
    print("yes")
elif year<1990 or year>2050:
    print("輸入錯誤")
else:
    print("no")
閏年判斷

6.題目6:

對於長度為5位的一個01串,每一位都可能是0或1,一共有32種可能。它們的前幾個是:

00000

00001

00010

00011

00100

請按從小到大的順序輸出這32種01串。

for i in range(32):
    print("{:05b}".format(i,'b'))
5位2進制

7.題目7:

利用字母可以組成一些美麗的圖形,下面給出了一個例子:

ABCDEFG

BABCDEF

CBABCDE

DCBABCD

EDCBABC

這是一個5行7列的圖形,請找出這個圖形的規律,並輸出一個n行m列的圖形。

#input:5 7
#output:
'''
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
'''
m, n = map(int, input().split())
letters = ''
# 1.產生所有字母
for i in range(26):
    letters += chr(ord("A") + i)

# 2. 產生第一行代碼
x = letters[:n]
for i in range(1,m+1):
    try:
        print(x)
        x = letters[i] + x[0:n-1]
    except:
        pass

'''
try:
    n, m = map(int, input().split())
    letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    x = letter[:m]
    for i in range(1, n + 1):
        print(x)
        x = letter[i] + x[0:-1]
except:
    pass

#本文版權歸作者和博客園共有,來源網址:https://www.cnblogs.com/xiaolan-Lin 歡迎各位轉載,
#未經作者本人同意轉載文章時,必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利!

'''


'''
import numpy as np
m,n = map(int,input().split())

#輸入原始矩陣
mx = np.ones((m,n),dtype="str")
print(mx)

#產生所有字母的列表
letters = []
for i in range(26):
    letters.append(chr(ord("A") + i))
# print(ord("A"))#65 某個字符串對應的ascii碼;chr ascii碼轉字符串
'''
字母圖形

8.題目8:

給出n個數,找出這n個數的最大值,最小值,和。

第一行為整數n,表示數的個數。

第二行有n個數,為給定的n個數,每個數的絕對值都小於10000。

輸出三行,每行一個整數。第一行表示這些數中的最大值,第二行表示這些數中的最小值,第三行表示這些數的和。

#input:5
#         1 3 -2 4 5
#output:
#5
#-2
#11

# 給出n個數,找出這n個數的最大值,最小值,和。
n = int(input()) #幾個數
a = input().split() #注意不能直接將列表轉換類型
a = [int(i) for i in a]

#>>> input().split()
#4 5 6
#['4', '5', '6']
#>>>

print(max(a))
print(min(a))
print(sum(a))
數列特征

 9.題目9:

給出一個包含n個整數的數列,問整數a在數列中的第一次出現是第幾個。

第一行包含一個整數n。

第二行包含n個非負整數,為給定的數列,數列中的每個數都不大於10000。

第三行包含一個整數a,為待查找的數。

如果a在數列中出現了,輸出它第一次出現的位置(位置從1開始編號),否則輸出-1。

#input:
#6
#1 9 4 8 3 9
#9
#output:
#2

n = int(input()) # 幾個數
a = input().split() 
a = [int(i) for i in a] # 輸入的列表
b = int(input()) # 待查找的數
try:
    print(a.index(b) + 1) #待查找數的下標,加一代表位置
except:
    print(-1)
列表查找

10.題目10:

楊輝三角形又稱Pascal三角形,它的第i+1行是(a+b)i的展開式的系數。

它的一個重要性質是:三角形中的每個數字等於它兩肩上的數字相加。

下面給出了楊輝三角形的前4行: 

1 

1 1  

1 2 1 

1 3 3 1

給出n,輸出它的前n行。

#input:4
#output:
#1
#1 1
#1 2 1
#1 3 3 1

#思想:列表相加 + 觀察
n = int(input())

def yanghui(p):
    p = [1] +  [p[i] + p[i+1] for i in range(len(p) - 1)] + [1]
    return p

#1.將每一行輸出一個列表
p = [1]
#print(p)
p_s = []
for i in range(n):
    p_s.append(p)
    p = yanghui(p)
    #p.append(0) #增加一個元素,因為下一行比上一行多一個,#不用了,上面p迭代呢
    #print(p)

#2.輸出
for i in p_s:
    #print(i)
    #將列表元素這樣輸出:1 3 3 1
    for j in i:
        print(j,end=' ')
    print("\t") #回車不換行
楊輝三角
#關鍵:后面一行除了前面和后面的1,中間的數是前面一行數的滑動兩個數的和

#1.產生楊輝三角
n = int(input())
begin = [[1],[1,1]]

for i in range(n-2):#因為前面兩個要加的數字是空的
    newend = begin[-1]
    new = [1]
    new = new + [newend[j]+newend[j+1] for j in range(len(newend) - 1)] + [1]
    begin.append(new)
a = str(begin)[1:-1]

#2.格式化字符串
import re
b = re.split(r'], ',a) # 分開每一個
c = [i + ']' for i in b[:]] # 加右括號
d = [] #將[]都去掉,之后將,轉換為空格
for i in range(len(c)):
    if i == len(c)-1:
        e = c[i][1:-2]
    else:
        e = c[i][1:-1]
    f = e.replace(',',' ') # str.replace(old, new[, max])
    d.append(f)
#print(d)

#3.輸出
h = n + 2*(n -1) #最后一行的長度
for i in d:
    s = ' '*((h-len(i))//2)
    print(s + i + s)

'''
#3.輸出(最后一行是n + n-1個長度)
h = n + 2*(n -1)
for i in d:
    print('{:^hs}'.format(i))
#精度保存時候是不能作為變量修改的
'''
    



    
楊輝三角2

11.題目11:

153是一個非常特殊的數,它等於它的每位數字的立方和,即153=1*1*1+5*5*5+3*3*3。編程求所有滿足這種條件的三位十進制數。

#按從小到大的順序輸出滿足條件的三位十進制數,每個數占一行。

#153是一個非常特殊的數,它等於它的每位數字的立方和,
#即153=1*1*1+5*5*5+3*3*3。編程求所有滿足這種條件的三位十進制數。

for i in range(100,1000):
    gewei = i%10
    shiwei = (i//10)%10
    baiwei = (i//100)%10
    if i == gewei**3 + shiwei**3 + baiwei**3:
        print(i)
特殊數字

12.題目12:

1221是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的,編程求所有這樣的四位十進制數。

#按從小到大的順序輸出滿足條件的四位十進制數。
for i in range(10000):
    gewei = i%10
    shiwei = (i//10)%10
    baiwei = (i//100)%10
    qianwei = (i//1000)%10
    if qianwei == 0:
        continue   
    elif gewei == qianwei and shiwei == baiwei:
        print(i)
        
回文數

13.題目13:

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

輸入一行,包含一個正整數n。

按從小到大的順序輸出滿足條件的整數,每個整數占一行。

#input:52
#output:
#899998
#989989
#998899

num1 = int(input())

for i in range(10000,999999):
    gewei = i%10
    shiwei = (i//10)%10
    baiwei = (i//100)%10
    qianwei = (i//1000)%10
    wanwei = (i//10000)%10
    shiwanwei = (i//100000)%10

    sum1 = gewei + shiwei + baiwei + qianwei + wanwei + shiwanwei
    tiaojian1 = (shiwanwei==0 and wanwei==gewei and shiwei==qianwei and num1==sum1)#5位數
    tiaojian2 = (shiwanwei==gewei and shiwei==wanwei and baiwei==qianwei and num1==sum1)#6位數
    if tiaojian1 or tiaojian2:
        print(i,end=" ")
        print("\t")
特殊回文數

14.題目14:

(1)給出一個非負整數,將它表示成十六進制的形式。

(2)從鍵盤輸入一個不超過8位的正的十六進制數字符串,將它轉換為正的十進制數后輸出。

(3)給定n個十六進制正整數,輸出它們對應的八進制數。

  輸入的第一行為一個正整數n (1<=n<=10)。
  接下來n行,每行一個由0~9、大寫字母A~F組成的字符串,表示要轉換的十六進制正整數,每個十六進制數長度不超過100000。

  輸出n行,每行為輸入對應的八進制正整數。

#給出一個非負整數,將它表示成十六進制的形式。
#10進制轉16進制:hex(n)  將10進制整數轉換成16進制,以字符串形式表示。
#10進制轉8進制oct(n)
#10進制轉二進制:bin(n)
#8進制轉16進制:hex(int(n,8))
#8進制轉換成10進制:int(n,8)
#8進制轉換成2進制:bin(int(n,8))
#2進制轉換成16進制:hex(int(n,2))
#2進制轉換成8進制:oct(int(n,2))
#2進制轉換成10進制:int(n,2)

#30 1E 10進制轉16進制
#n = int(input())
#s = hex(n)[2:]
#print(s.upper()) 

'''
str = "www.runoob.com"
print(str.upper())          # 把所有字符中的小寫字母轉換成大寫字母
print(str.lower())          # 把所有字符中的大寫字母轉換成小寫字母
print(str.capitalize())     # 把第一個字母轉化為大寫字母,其余小寫
print(str.title())          # 把每個單詞的第一個字母轉化為大寫,其余小寫 
'''

#16進制轉10進制 FFFF 65535
#a = input() 
#a = '0x' + a
#print(int(a,16)) #注意:int最終輸出為10進制

#16進制轉8進制
n = int(input()) #想要轉換的數的個數
l1 = [] #存儲要輸出的轉換后的8進制字符串
for i in range(n):
    a = input() #接收轉換的數
    a = '0x' + a
    b = int(a,16) #16進制對應的10進制數
    s = oct(b)[2:]
    l1.append(s)

#輸出:
for i in l1:
    print(i)
進制轉換

15.問題15(這個的知道內存的知識):

給定一個長度為n的數列,將這個數列按從小到大的順序排列。

第一行為一個整數n。
第二行包含n個整數,為待排序的數,每個整數的絕對值小於10000。

輸出一行,按從小到大的順序輸出排序后的數列。

5
8 3 6 4 9

3 4 6 8 9

n = int(input()) #列表的長度
l1 = input().split()#接收傳入的數字,轉為列表
l1 = [int(i) for i in l1]
#print(l1)
#list.sort(cmp=None, key=None, reverse=False)
'''
l1ed = l1.sort()
print(id(l1ed),id(l1.sort()),id(l1))
print(l1ed)
#這塊的話:l1ed指向那個l1排序后的那個空間,
#而sort的話是在原內存上面進行的,那邊是空的

#list 的 sort 方法返回的是對已經存在的列表進行操作,而內建函數 sorted 方法返回的是一個新的 list,
#而不是在原來的基礎上進行的操作。
'''
l1.sort()

for i in l1:
    print(i,end = ' ')
數列排序

 16. 題目16:時間轉換,將秒換為時分秒的形式

#eg: input:3661   #(t最大為86399,其 < 60**3)
#output: 1:1:1

t = int(input())

shi = 0
fen = 0
miao = 0

if t < 60:
    miao = t  
elif t < 60**2:
    fen = t//60
    miao = t - fen*60
else:
    shi = t//(60**2)
    fen = (t - shi*3600)//60
    miao = t - shi*3600 - fen*60

print(str(shi) + ":" + str(fen) + ":" + str(miao))
時間轉換

17. 題目17:

#給定兩個僅由大寫字母或小寫字母組成的字符串(長度介於1到10之間),它們之間的關系是以下4中情況之一:
#1:兩個字符串長度不等。比如 Beijing 和 Hebei
#2:兩個字符串不僅長度相等,而且相應位置上的字符完全一致(區分大小寫),比如 Beijing 和 Beijing
#3:兩個字符串長度相等,相應位置上的字符僅在不區分大小寫的前提下才能達到完全一致(也就是說,它並不滿足情況2)。比如 beijing 和 BEIjing
#4:兩個字符串長度相等,但是即使是不區分大小寫也不能使這兩個字符串一致。比如 Beijing 和 Nanjing
#編程判斷輸入的兩個字符串之間的關系屬於這四類中的哪一類,給出所屬的類的編號。

'''
print(str.upper())          # 把所有字符中的小寫字母轉換成大寫字母
print(str.lower())          # 把所有字符中的大寫字母轉換成小寫字母
print(str.capitalize())     # 把第一個字母轉化為大寫字母,其余小寫
print(str.title())          # 把每個單詞的第一個字母轉化為大寫,其余小寫 
'''
s1 = input()
s2 = input()
if len(s1) != len(s2):
    print(1)
elif s1 == s2:
    print(2)
elif s1 != s2 and s1.upper() == s2.upper():
    print(3)
else:
    print(4)
字符串判斷

18.題目18:

因式分解:輸入范圍[a b],輸出其中所有數字的因式分解。

3 10
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5

#str = "-";
#seq = ("a", "b", "c")
#print(str.join( seq )) #a-b-c

a, b = map(int, input().split())
for num in range(a,b+1):
    e = num #備份num
    m = [] #用來存儲各個分式
    
    while e != 1:
        for i in range(2,num+1):
            if e%i == 0:
                m.append(str(i))
                e //= i
                break
            #因為例如4 = 2*2,試了2之后還要試2
    print("{}=".format(num),end="")
    print("*".join(m))
    
#原文地址:https://blog.csdn.net/weixin_43937790/article/details/105024479
因式分解

 19.題目19(這個測試數據是正確的,但是我真不知道問題出在哪里):

給定一個N階矩陣A,輸出A的M次冪(M是非負整數)
  例如:
  A =
  1 2
  3 4
  A的2次冪
  7 10
  15 22

輸入格式
  第一行是一個正整數N、M(1<=N<=30, 0<=M<=5),表示矩陣A的階數和要求的冪數
  接下來N行,每行N個絕對值不超過10的非負整數,描述矩陣A的值
輸出格式
  輸出共N行,每行N個整數,表示A的M次冪所對應的矩陣。相鄰的數之間用一個空格隔開
import numpy as np

m,n = map(int,input().split())# m階矩陣,n次冪
mx = np.zeros((m,m),dtype="int") #存儲矩陣元素

i = 0 #遍歷每一行時候的指針
mx_row_str = [] #存儲矩陣元素每一行的字符串形式
mx_row_int = [] #存儲矩陣元素每一行的數字形式

#1.循環寫入矩陣
while i < m:
    mx_row_str = input().split()
    mx_row_int = [int(j) for j in mx_row_str]
    mx[i] = mx_row_int
    i += 1

#2.將array轉為mat(矩陣)形式,因為矩陣有運算
mx = np.mat(mx)
mx_out = mx**n
#print(mx_out)

#3.輸出為指定格式
mx_out = mx_out.tolist()

#這個輸出格式這塊注意一下
for i in mx_out:
    for j in i:
        print(j,end = ' ')
    print("\t")
#print(mx_out)

    
    
矩陣的冪

20.題目20:

問題描述
  平面上有兩個矩形,它們的邊平行於直角坐標系的X軸或Y軸。對於每個矩形,我們給出它的一對相對頂點的坐標,請你編程算出兩個矩形的交的面積。
輸入格式
  輸入僅包含兩行,每行描述一個矩形。
  在每行中,給出矩形的一對相對頂點的坐標,每個點的坐標都用兩個絕對值不超過10^7的實數表示。
輸出格式
  輸出僅包含一個實數,為交的面積,保留到小數后兩位。
#原文鏈接:https://www.pythonf.cn/read/12682
#用個list轉換就可以:
s1 = list(map(float, input().split()))
s2 = list(map(float, input().split()))

if s1[0] > s1[2]:
    s1[0],s2[2] = s1[2],s1[0] #交換x軸
if s1[1] > s1[3]:
    s1[1],s2[3] = s1[3],s1[1] #交換y軸
    
if s2[0] > s2[2]:
    s2[0],s2[2] = s2[2],s2[0] #交換x軸
if s1[1] > s1[3]:
    s2[1],s2[3] = s2[3],s2[1] #交換y軸

#print(s1,s2)
temp_x1 = max(s1[0],s2[0]) #中間矩形的橫坐標(左)
temp_y1 = max(s1[1],s2[1])

temp_x2 = min(s1[2],s2[2]) #中間矩形的橫坐標(右)
temp_y2 = min(s1[3],s2[3])

if temp_x1 > temp_x2 or temp_y2 < temp_y1:
    r = 0
else:
    r =  abs(temp_x1-temp_x2)*abs(temp_y1-temp_y2)
print("{:.2f}".format(r))
矩形面積交

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM