python模擬練習(xí)題總結(jié)(附答案)
問題一
如果一個數(shù) p 是個質(zhì)數(shù),同時又是整數(shù) a的約數(shù),則 p 稱為 a的一個質(zhì)因數(shù)。
請問 2024 有多少個質(zhì)因數(shù)?
步驟 1: 分解 2024
首先,2024 是偶數(shù),說明可以被 2 整除。我們從 2 開始進(jìn)行除法分解:
2024÷2=1012
1012÷2=506
506÷2=253
253 不是偶數(shù),所以它不能再被 2 整除。我們接下來檢查 253 能否被 3 整除。因為 253 各位數(shù)字之和 2+5+3=10,10 不能被 3 整除,因此 253 不能被 3 整除。
接下來檢查 253 能否被 5 整除,253 末尾不是 0 或 5,所以不能被 5 整除。
然后檢查 253 能否被 11 整除。計算 253 除以 11:
253÷11=23
所以,253 可以被 11 整除,商為 23。23 是一個質(zhì)數(shù),無法再分解。
步驟 2: 質(zhì)因數(shù)分解
通過以上步驟,我們可以得出 2024 的質(zhì)因數(shù)分解:
2024=23×11×232024=23×11×23
步驟 3: 質(zhì)因數(shù)的個數(shù)
質(zhì)因數(shù)包括 2、11 和 23。因此,2024 的質(zhì)因數(shù)有 3 個,分別是 2、11 和 23。
答案:
2024 的質(zhì)因數(shù)有 3 個。
問題二
對于一個整數(shù) n ,我們定義一次開根變換會將 n 變?yōu)殚_根號后的整數(shù)部分。即變?yōu)槠椒胶筒怀^ n 的數(shù)中的最大數(shù)。
例如,20 經(jīng)過開根變換將變?yōu)?4 ,如果再經(jīng)過一次開根變換將變?yōu)?2 ,如果再經(jīng)過一次開根變換將變?yōu)?1 。
請問,2024經(jīng)過多少次開根變換后會變?yōu)?1 ?
初始值為 2024。
第一次開根變換:2024≈45.0112024?≈45.011,取整數(shù)部分為 45。
第二次開根變換:45≈6.70845?≈6.708,取整數(shù)部分為 6。
第三次開根變換:6≈2.4496?≈2.449,取整數(shù)部分為 2。
第四次開根變換:2≈1.4142?≈1.414,取整數(shù)部分為 1。
因此,2024經(jīng)過 4 次開根變換后會變?yōu)?1。
代碼計算:
import math def abc(n): c = 0 while n > 1: n = math.isqrt(n) c += 1 return c n = 2024 a = abc(n) print(a)
問題三
小藍(lán)有很多 1x1x1 的小立方體,他可以使用多個立方體拼成更大的立方體。
例如,小藍(lán)可以使用 8 個小立方體拼成一個大立方體,每邊都是 2 個。
又如,小藍(lán)可以使用 27 個小立方體拼成一個大立方體,每邊都是 3 個。
現(xiàn)在,小藍(lán)有 2024 個小立方體,他想再購買一些小立方體,用于拼一個超大的立方體,要求所有的小立方體都用上,拼成的大立方體每邊長度都相等。 請問,小藍(lán)最少需要購買多少個小立方體?
大立方體的體積: 一個邊長為 n 的大立方體的體積是 n**3(即 n×n×n)。
目標(biāo): 我們需要找到一個 n,使得 n**3≥2024,并且 n**3−2024 是最小的,即最少需要購買的立方體數(shù)量。
計算 2024 的立方根,以估計一個接近的 nn。我們可以用計算器計算:
2024≈12.6348
因此,邊長 n 至少應(yīng)該是 13,因為 123=1728小于 2024,而 133=2197 大于 2024。
133=2197 是一個大立方體的體積。
小藍(lán)已經(jīng)有 2024 個小立方體,所以他需要購買的數(shù)量是:
2197−2024=173
代碼計算:
n = 2024 i = 13 while i**3 < n: i += 1 x = i**3 a = x - n print("小藍(lán)最少需要購買的立方體數(shù)量:", a)
問題四
如果一個日期的日期以 1 結(jié)尾(1日、11日、21日、31日)且為星期一,則稱這個日期為一好日期。
請問從 1901 年 1 月 1 日至 2024 年 12 月 31 日總共有多少個一好日期。
提示:1901 年 1 月 1 日是星期二。
確定日期范圍: 從 1901 年 1 月 1 日到 2024 年 12 月 31 日。
了解每個月的 "1 日"、"11 日"、"21 日"、"31 日": 這些是以 1 結(jié)尾的日期。我們需要檢查每個月這些日期是否是星期一。
確定每年的每個月的具體情況: 每年的不同月份中,某些月份的日期可能會出現(xiàn) 31 日,而有些月份(如 2 月、4 月、6 月等)沒有 31 日。
確定每個日期是星期幾: 利用已知的起始日期(1901 年 1 月 1 日是星期二),我們可以通過計算每個日期的星期幾來確定是否是星期一。
代碼計算:
import datetime start_date = datetime.date(1901, 1, 1) good_dates_count = 0 # 遍歷從1901年1月1日到2024年12月31日的日期 for year in range(1901, 2025): for month in range(1, 13): # 檢查該月的1日、11日、21日、31日(如果有31日) for day in [1, 11, 21]: try: # 創(chuàng)建該日期 current_date = datetime.date(year, month, day) # 如果該日期是星期一(星期一對應(yīng)的數(shù)字是0) if current_date.weekday() == 0: good_dates_count += 1 except ValueError: # 如果日期無效(如2月30日),則跳過 pass # 檢查31日是否在該月中有效 if month in [1, 3, 5, 7, 8, 10, 12]: # 有31日的月份 try: current_date = datetime.date(year, month, 31) if current_date.weekday() == 0: good_dates_count += 1 except ValueError: pass print("一好日期的總數(shù)是:", good_dates_count)
問題五
兩個數(shù)按位異或是指將這兩個數(shù)轉(zhuǎn)換成二進(jìn)制后,最低位與最低位異或作為結(jié)果的最低位,次低位與次低位異或作為結(jié)果的次低位,以此類推。
例如,3 與 5 按位異或值為 6 。
小藍(lán)有以下 30 個整數(shù):
9226, 4690, 4873, 1285, 4624, 1596, 6982, 590, 8806, 121, 8399, 8526, 5426, 64, 9655, 7705, 3929, 3588, 7397, 8020, 1311, 5676, 3469, 2325, 1226, 8203, 9524, 3648, 5278, 8647.
小藍(lán)想找一個整數(shù) V ,使得 V 與這 30 個數(shù)分別異或后,得到的 30 個數(shù)的平方和最小。請問平方和最小是多少?
1.將每個數(shù)轉(zhuǎn)換為 16 位二進(jìn)制數(shù)(因為最大數(shù) 9655 的二進(jìn)制表示需要 14 位,可以補充到 16 位來統(tǒng)一處理)。
2.對每一位,統(tǒng)計 30 個數(shù)中該位為 1 的數(shù)量。
3.如果該位為 1 的數(shù)量超過一半(即大多數(shù)數(shù)在該位上是 1),則選擇 V在這一位上為 1,否則為 0。
4.根據(jù)得到的 V 計算每個 ai⊕V 的平方和。
代碼計算:
nums = [ 9226, 4690, 4873, 1285, 4624, 1596, 6982, 590, 8806, 121, 8399, 8526, 5426, 64, 9655, 7705, 3929, 3588, 7397, 8020, 1311, 5676, 3469, 2325, 1226, 8203, 9524, 3648, 5278, 8647 ] bit_length = 16 count_ones = [0] * bit_length for num in nums: for i in range(bit_length): if num & (1 << (bit_length - 1 - i)): count_ones[i] += 1 V = 0 for i in range(bit_length): if count_ones[i] > len(nums) // 2: V |= (1 << (bit_length - 1 - i)) squared_sum = 0 for num in nums: squared_sum += (num ^ V) ** 2 print(f"最小的平方和是: {squared_sum}")
問題六
小藍(lán)在一個停車場停車。
停車場的收費規(guī)則為:每 15 分鐘收費 2 元,不滿 15 分鐘的不收費。
小藍(lán)總共停車 n 分鐘,請問收費總額是多少?
【輸入格式】 輸入一行包含一個整數(shù) n ,表示小藍(lán)停車的時長。
【輸出格式】 輸出一行包含一個整數(shù),表示停車費用。
【樣例輸入】 150
【樣例輸出】 20
【樣例輸入】 2024
【樣例輸出】 268
我們可以使用整數(shù)除法和取余操作來幫助我們確定停車時長的分段數(shù)。
可以用 (n + 14) // 15
來計算向上取整的次數(shù)。如果 n
不是15的整數(shù)倍,就多計一段。
例如:對于 n = 16
,(16 + 14) // 15
的結(jié)果是 2
,表示收費2段15分鐘。
每段15分鐘收費2元,所以最終收費就是 (n + 14) // 15 * 2
。
代碼計算
n=int(input()) if(n>=15): b=n//15 c=b*2 print(c)
問題七
小藍(lán)有一個整數(shù) n ,每次操作,可以將這個整數(shù)的每個非零數(shù)位減少 1 。
請問經(jīng)過多少次操作,這個數(shù)會變?yōu)?0 。
例如,整數(shù) 2024 經(jīng)過一次操作變?yōu)?1013,再經(jīng)過一次操作變?yōu)?2 (即0002),再經(jīng)過兩次操作變?yōu)?0 ,總共經(jīng)過 4 次變換變?yōu)?0 。
【輸入格式】 輸入一行包含一個整數(shù) n 。
【輸出格式】 輸出一行,包含一個整數(shù),表示答案。
【樣例輸入】 2024
【樣例輸出】 4
觀察每一位:整數(shù)的每一位非零數(shù)字在每一次操作中都會減少 1,直到該位數(shù)字變成 0。
操作次數(shù):可以通過統(tǒng)計該整數(shù)各位的最大值來判斷操作次數(shù)。因為每一位數(shù)字都會在每一次操作中減少 1,所以最終需要進(jìn)行的操作次數(shù)就是這整個數(shù)各位最大數(shù)字的數(shù)量。
代碼計算:
def min_operations_to_zero(n): # 轉(zhuǎn)換為字符串,遍歷每一位字符 digits = str(n) # 找出所有非零數(shù)字的最大值 max_digit = max(int(d) for d in digits if d != '0') return max_digit n = int(input().strip()) print(min_operations_to_zero(n))
問題八
小藍(lán)有一個減法式子,形如 a-b,其中 a 和 b 都是非負(fù)整數(shù)(不保證結(jié)果非負(fù))。
請編程處理這個式子,輸出運算結(jié)果。
【輸入格式】 輸入一行包含一個減法表達(dá)式,式子中僅含數(shù)字字符和一個減號。
【輸出格式】 輸出一行包含一個整數(shù),表示運算結(jié)果。
【樣例輸入】 2024-1949
【樣例輸出】 75
【樣例輸入】 20-24
【樣例輸出】 -4
輸入格式中有一個減法符號 -
,它將兩個數(shù)字 a
和 b
分開。我們可以利用這個符號來分割輸入字符串,從而得到 a
和 b
。
將解析出來的 a
和 b
轉(zhuǎn)換為整數(shù)后,直接進(jìn)行減法運算,得出結(jié)果。
代碼計算:
e = input().strip() a, b = e.split('-') a = int(a) b = int(b) print(a - b)
問題九
小藍(lán)有一個長度為 n 的整數(shù)數(shù)列 a[1], a[2], ..., a[n] 。
對于一個給點的整數(shù) k ,小藍(lán)想找到相鄰間隔為 1 的 k 個數(shù) a[p], a[p+2], a[p+4], ..., a[p+2k-2],使得他們的和最大。其中 1 <= p <= n-2k+2。
給定數(shù)列和 k ,請問給出最大的和。
【輸入格式】 輸入的第一行包含一個整數(shù) n 。
第二行包含 n 個整數(shù),相鄰數(shù)之間使用一個空格分隔,依次表示 a[1], a[2], ..., a[n] 。
第三行包含一個整數(shù) k 。
【輸出格式】 輸出一行,包含一個整數(shù),表示答案。
【樣例輸入】 10 2 1 4 7 4 8 3 6 4 7 2 【樣例輸出】 15 【樣例說明】 取 p=4,a[4]+a[6]=7+8=15 最大。
代碼計算:
def max_sum(n, a, k): max_sum_value = float('-inf') for p in range(n - 2 * k + 2): current_sum = 0 for i in range(k): current_sum += a[p + 2 * i] # a[p], a[p+2], ..., a[p+2k-2] max_sum_value = max(max_sum_value, current_sum) return max_sum_value n = int(input()) a = list(map(int, input().split())) k = int(input()) result = max_sum(n, a, k) print(result)
問題十
小藍(lán)有一個長度為 n 的整數(shù)序列 a[1], a[2], ..., a[n] 。
他希望從中找出一個最長的子序列,形成一個勾的形狀(√)。
即找到 1 <= p[1] < p[2] < ... < p[k] <= n,滿足 a[p[1]] > a[p[2]] > a[p[3]] > ... > a[p[x]] < a[p[x+1]] < ... < a[p[k]] 。其中 k 是子序列的長度,x 是勾中最小的位置。目標(biāo)是使得 k 最大。
請找出最大的勾的長度。
【輸入格式】 輸入的第一行包含一個整數(shù) n 。
第二行包含 n 個整數(shù),相鄰數(shù)之間使用一個空格分隔,依次表示 a[1], a[2], ..., a[n] 。
【輸出格式】 輸出一行,包含一個整數(shù),表示答案。
【樣例輸入】 10 2 1 4 7 4 8 3 6 4 7 【樣例輸出】 5 【樣例說明】 當(dāng) p = (4,5,7,9,10) 時,a[4] , a[5] , a[7] , a[9] , a[10] 可形成一個長度為 5 的勾:7,4,3,6,7。
代碼計算:
def longest_hoop(n, a): dec = [1] * n inc = [1] * n for i in range(1, n): for j in range(i): if a[i] < a[j]: dec[i] = max(dec[i], dec[j] + 1) for i in range(n - 2, -1, -1): for j in range(n - 1, i, -1): if a[i] < a[j]: inc[i] = max(inc[i], inc[j] + 1) # 計算勾的最大長度 max_length = 0 for i in range(n): if dec[i] > 1 and inc[i] > 1: max_length = max(max_length, dec[i] + inc[i] - 1) return max_length n = int(input()) a = list(map(int, input().split())) print(longest_hoop(n, a))
總結(jié)
到此這篇關(guān)于python模擬練習(xí)題的文章就介紹到這了,更多相關(guān)python模擬練習(xí)題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python+VTK環(huán)境搭建及第一個簡單程序代碼
這篇文章主要介紹了python+VTK環(huán)境搭建及第一個簡單程序代碼,簡單介紹了vtk,然后分享了安裝步驟,最后涉及一個簡單的代碼示例,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12python如何標(biāo)準(zhǔn)化日期時間格式轉(zhuǎn)化成非標(biāo)準(zhǔn)化格式
這篇文章主要介紹了python如何標(biāo)準(zhǔn)化日期時間格式轉(zhuǎn)化成非標(biāo)準(zhǔn)化格式問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06在Python中使用mongoengine操作MongoDB教程
這篇文章主要介紹了在Python中使用mongoengine操作MongoDB教程,包括在Django下的一些使用技巧,需要的朋友可以參考下2015-04-04python生成隨機數(shù)、隨機字符、隨機字符串的方法示例
這篇文章主要介紹了python生成隨機數(shù)、隨機字符、隨機字符串的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Jupyter Notebook遠(yuǎn)程登錄及密碼設(shè)置操作
今天小編就為大家分享一篇Jupyter Notebook遠(yuǎn)程登錄及密碼設(shè)置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04