天天看點

簡單模拟例題一覽(可看着這些題目想出來代碼才算過關)害死人不償命的(3n+1)猜想(卡拉茲幻想)挖掘機技術哪家強A+B和CA+B and C(64Bit)部分A+B程式運作時間劃拳數組元素循環右移問題數字分類錘子剪子布Shuffling MachineShortest Distance一進制多項式求導A+B for PolynomialsProduct of Polynomials

例題一覽(可看着這些題目想出來代碼才算過關)

(全程注意封裝,養成良好的面向對象思維)

  • 害死人不償命的(3n+1)猜想(卡拉茲幻想)
  • 挖掘機技術哪家強
  • A+B和C
  • A+B and C(64Bit)
  • 部分A+B
  • 程式運作時間
  • 劃拳
  • 數組元素循環右移問題
  • 數字分類
  • 錘子剪子布
  • Shuffling Machine
  • Shortest Distance
  • 一進制多項式求導
  • A+B for Polynomials
  • Product of Polynomials

害死人不償命的(3n+1)猜想(卡拉茲幻想)

輸入一個數,偶數時則砍掉一半;奇數時,則(3n+1)砍掉一半,最後直到得到1.

問,進行了多少次?

挖掘機技術哪家強

題目描述

為了用事實說明挖據機技術到底哪家強,PAT組織了一場挖據機技能大賽。請根據比賽結果統計出技術最強的那個學校。

輸入格式

在第1行給出不超過10的正整數N,即參賽人數。随後N行,每行給出一位參賽者的資訊和成績,包括其所代表的學校的編号(從1開始連續編号)及其比賽成績(百分制),中間以空格分隔。

輸出格式

在一行中給出總得分最高的學校的編号及其總分,中間以空格分隔。題目保證答案唯一,沒有并列。

輸入樣例

6

3 65

2 80

1 100

2 70

3 40

3 0

輸出樣例

2 150

A+B和C

題目描述

給定區間 [−2^31,2^31] 内的 3 個整數 A、B 和 C,請判斷 A+B 是否大于 C。

輸入格式:

輸入第 1 行給出正整數 T (≤10),是測試用例的個數。随後給出 T 組測試用例,每組占一行,順序給出 A、B和 C。整數間以空格分隔。

輸出格式:

對每組測試用例,在一行中輸出 Case #X: true 如果 A+B>C,否則輸出 Case #X: false,其中 X 是測試用例的編号(從 1 開始)。

4

1 2 3

2 3 4

2147483647 0 2147483646

0 -2147483648 -2147483647

A+B and C(64Bit)

給定 [− 2^63,2^63]中的三個整數A,B和C,您應該确定是否A + B> C。

輸入規格:

輸入的第一行給出測試用例的正數T(≤10)。然後是T個測試用例,每個用例包含一行,其中包含三個整數A,B和C,以單個空格分隔。

輸出規格:

對于每個測試用例,在一行中輸出情況#X:如果A + B> C,則為true

A + B> C或KaTeX解析錯誤:預期為'EOF',在位置6獲得'#':案例#̲X:否則為false,其中X為案例編号(從1開始)。

Sample Input:

3

1 2 3

2 3 4

9223372036854775807 -9223372036854775808 0           

複制

Sample Output:

Case #1: false

    Case #2: true

    Case #3: false           

複制

部分A+B

正整數A的“DA(為1位整數)部分”定義為由A中所有DA組成的新整數PA。例如:給定A = 3862767,DA = 6,則A的“6部分”PA是66,因為A中有2個6。

現給定A、DA、B、DB,請編寫程式計算PA + PB。

輸入格式:

輸入在一行中依次給出A、DA、B、DB,中間以空格分隔,其中0 < A, B < 10^10。

輸出格式:

在一行中輸出PA + PB的值。

輸入樣例1:

3862767 6 13530293 3

輸出樣例1:

399

程式運作時間

要獲得一個C語言程式的運作時間,常用的方法是調用頭檔案time.h,其中提供了clock()函數,可以捕捉從程式開始運作到clock()被調用時所耗費的時間。這個時間機關是clock tick,即“時鐘打點”。同時還有一個常數CLK_TCK,給出了機器時鐘每秒所走的時鐘打點數。于是為了獲得一個函數f的運作時間,我們隻要在調用f之前先調用clock(),獲得一個時鐘打點數C1;在f執行完成後再調用clock(),獲得另一個時鐘打點數C2;兩次獲得的時鐘打點數之差(C2-C1)就是f運作所消耗的時鐘打點數,再除以常數CLK_TCK,就得到了以秒為機關的運作時間。這裡不妨簡單假設常數CLK_TCK為100。現給定被測函數前後兩次獲得的時鐘打點數,請你給出被測函數運作的時間。

輸入格式:

輸入在一行中順序給出2個整數C1和C1。注意兩次獲得的時鐘打點數肯定不相同,即C1 < C2,并且取值在[0, 10^7]。

輸出格式:

在一行中輸出被測函數運作的時間。運作時間必須按照“hh:mm:ss”(即2位的“時:分:秒”)

格式輸出;不足1秒的時間四舍五入到秒。

輸入樣例:

123 4577973

輸出樣例:

12:42:59

劃拳

劃拳是古老中國酒文化的一個有趣的組成部分。酒桌上兩人劃拳的方法為:每人口中喊出一個數字,同時用手比劃出一個數字。如果誰比劃出的數字正好等于兩人喊出的數字之和,誰就赢了,輸家罰一杯酒。兩人同赢或兩人同輸則繼續下一輪,直到唯一的赢家出現。

下面給出甲、乙兩人的劃拳記錄,請你統計他們最後分别喝了多少杯酒。

輸入格式:

輸入第一行先給出一個正整數N(<=100),随後N行,每行給出一輪劃拳的記錄,格式為:

甲喊 甲劃 乙喊 乙劃

其中“喊”是喊出的數字,“劃”是劃出的數字,均為不超過100的正整數(兩隻手一起劃)。

輸出格式:

在一行中先後輸出甲、乙兩人喝酒的杯數,其間以一個空格分隔。

數組元素循環右移問題

簡單模拟例題一覽(可看着這些題目想出來代碼才算過關)害死人不償命的(3n+1)猜想(卡拉茲幻想)挖掘機技術哪家強A+B和CA+B and C(64Bit)部分A+B程式運作時間劃拳數組元素循環右移問題數字分類錘子剪子布Shuffling MachineShortest Distance一進制多項式求導A+B for PolynomialsProduct of Polynomials

數字分類

給定一系列正整數,請按要求對數字進行分類,并輸出以下5個數字:

A1 = 能被5整除的數字中所有偶數的和;

A2 = 将被5除後餘1的數字按給出順序進行交錯求和,即計算n1-n2+n3-n4...;

A3 = 被5除後餘2的數字的個數;

A4 = 被5除後餘3的數字的平均數,精确到小數點後1位;

A5 = 被5除後餘4的數字中最大數字。

輸入格式:

每個輸入包含1個測試用例。每個測試用例先給出一個不超過1000的正整數N,随後給出N個不超過1000的待分類的正整數。數字間以空格分隔。

輸出格式:

對給定的N個正整數,按題目要求計算A1~A5并在一行中順序輸出。數字間以空格分隔,但行末不得有多餘空格。

若其中某一類數字不存在,則在相應位置輸出“N”。

輸入樣例1:

13 1 2 3 4 5 6 7 8 9 10 20 16 18

輸出樣例1:

30 11 2 9.7 9

輸入樣例2:

8 1 2 4 5 6 7 9 16

輸出樣例2:

N 11 2 N 9

錘子剪子布

大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,并且給出雙方分别出什麼手勢的勝算最大。

簡單模拟例題一覽(可看着這些題目想出來代碼才算過關)害死人不償命的(3n+1)猜想(卡拉茲幻想)挖掘機技術哪家強A+B和CA+B and C(64Bit)部分A+B程式運作時間劃拳數組元素循環右移問題數字分類錘子剪子布Shuffling MachineShortest Distance一進制多項式求導A+B for PolynomialsProduct of Polynomials

輸入格式:

輸入第1行給出正整數N(<=105),即雙方交鋒的次數。随後N行,每行給出一次交鋒的資訊,即甲、乙雙方同時給出的的手勢。C代表“錘子”、J代表“剪刀”、B代表“布”,第1個字母代表甲方,第2個代表乙方,中間有1個空格。

輸出格式:

輸出第1、2行分别給出甲、乙的勝、平、負次數,數字間以1個空格分隔。第3行給出兩個字母,分别代表甲、乙獲勝次數最多的手勢,中間有1個空格。如果解不唯一,則輸出按字母序最小的解。

輸入樣例:

10

C J

J B

C B

B B

B C

C C

C B

J B

B C

J J

輸出樣例:

5 3 2

2 3 5

B B

Shuffling Machine

簡單模拟例題一覽(可看着這些題目想出來代碼才算過關)害死人不償命的(3n+1)猜想(卡拉茲幻想)挖掘機技術哪家強A+B和CA+B and C(64Bit)部分A+B程式運作時間劃拳數組元素循環右移問題數字分類錘子剪子布Shuffling MachineShortest Distance一進制多項式求導A+B for PolynomialsProduct of Polynomials
簡單模拟例題一覽(可看着這些題目想出來代碼才算過關)害死人不償命的(3n+1)猜想(卡拉茲幻想)挖掘機技術哪家強A+B和CA+B and C(64Bit)部分A+B程式運作時間劃拳數組元素循環右移問題數字分類錘子剪子布Shuffling MachineShortest Distance一進制多項式求導A+B for PolynomialsProduct of Polynomials
簡單模拟例題一覽(可看着這些題目想出來代碼才算過關)害死人不償命的(3n+1)猜想(卡拉茲幻想)挖掘機技術哪家強A+B和CA+B and C(64Bit)部分A+B程式運作時間劃拳數組元素循環右移問題數字分類錘子剪子布Shuffling MachineShortest Distance一進制多項式求導A+B for PolynomialsProduct of Polynomials

Shortest Distance

(挖坑,待解決)

題目的意思是,有一些環形站點,給你這幾個站點和鄰居之間的距離,然後給你兩個站點編号,求它們的最近距離。

簡單模拟例題一覽(可看着這些題目想出來代碼才算過關)害死人不償命的(3n+1)猜想(卡拉茲幻想)挖掘機技術哪家強A+B和CA+B and C(64Bit)部分A+B程式運作時間劃拳數組元素循環右移問題數字分類錘子剪子布Shuffling MachineShortest Distance一進制多項式求導A+B for PolynomialsProduct of Polynomials

很多種方法

第一種是順着思路,正着搜一遍,反着搜一遍。遇到清單尾巴了就移到0,相當于環形了。優點是直覺友善。

第二種是,直接把原來的距離數組複制一遍,然後就搜兩次,一次從原來的begin和end搜,一次搜end到distance + begin 的距離。優點是代碼少。缺點是空間複雜度高且算法沒什麼本質上的卵用。

還有一種是動态規劃法。

既然題目已經提示有多次查詢,那麼把以前的計算記錄存儲起來就很自然。

方法是,開一個二維數組dp,對于dp[i][j]的含義就是,從i車站沿車站号增大的方向到車站j所需要的路程。比如dp[2][3]表示從車站2開到車站3的路程,而dp[3][2]就是從車站3開到最後一個車站繞回第0車站再開到車站2的路程。

我們初始化dp數組都是0

然後讀入資料

周遊車站号,從0到總車站

這個車站到下一個車站的距離就是讀入的資料。下一個車站用(i+1)% len(stations) 這樣的取餘的方式,可以規避最後加一要回到原點的問題。

接下來按照距離周遊,因為自己和自己的距離是0,自己和下一個車站的距離已經給出,是以距離從2周遊到車站數量-1

每次車站i到車站j的距離就相當于車站i到車站j-1加上車站j-1到車站j的距離。這是狀态轉移公式。因為是按照距離從小到大計算的,是以等号右邊的一定是已經計算過的。同時用老方法規避回到起點的問題。寫成代碼就是

dp[j][(j + i) % len(dis)] = dp[j][(j + i - 1) % len(dis)] + dp[(j + i - 1) % len(dis)][(j + i) % len(dis)]

其中,i是周遊的距離

輸出的時候取dp[i][j]與dp[j][i]的較小值即可。

以上三種方法都沒有利用到一個資訊。

就是整個環的長度都是固定的,假設為S,那麼正着走距離是A,反着走距離一定是S-A

是以算完正的就沒必要再算反着的了,直接用總和減即可

這一點和前面三種方法都可以組合,形成六種方法。

然而我最推薦的是這第七種方法,求和清單法,也要結合上面的那一個資訊。

我們設一個清單,[d0,d1,d2,d3,d4,…,]每一個dx代表從起始站到第x号車站的距離。那麼第一項就是d0 = 0,最後一項是繞成一個環以後又回到起點的距離。

那麼我們求x到y的距離,實際上就是求0到y的距離減去0到x的距離,與總環長度減去(0到y的距離減去0到x的距離),即min(_sum[b] - _sum[a], _sum[-1] - _sum[b] + _sum[a])

這種方法是複雜度最低的。

參考

https://qsctech-sange.github.io/1046-Shortest-Distance

一進制多項式求導

設計函數求一進制多項式的導數。(注:xn(n為整數)的一階導數為n*xn-1。)

輸入格式:

以指數遞降方式輸入多項式非零項系數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。

輸出格式:

以與輸入相同的格式輸出導數多項式非零項的系數和指數。數字間以空格分隔,但結尾不能有多餘空格。注意“零多項式”的指數和系數都是0,但是表示為“0 0”。

輸入樣例:

3 4 -5 2 6 1 -2 0

輸出樣例:

12 3 -10 1 6 0

A+B for Polynomials

題目:計算多項式A+B的和~

Sample Input

2 1 2.4 0 3.2

2 2 1.5 1 0.5

Sample Output

3 2 1.5 1 2.9 0 3.2

分析:設立c數組,長度為指數的最大值,c[i] = j表示指數i的系數為j,接收a和b輸入的同時将對應指數的系數加入到c中,累計c中所有非零系數的個數,然後從後往前輸出所有系數不為0的指數和系數~

Product of Polynomials

題目:給出兩個多項式A和B,求A*B的結果~

Sample Input

2 1 2.4 0 3.2

2 2 1.5 1 0.5

Sample Output

3 3 3.6 2 6.0 1 1.6

分析:double類型的arr數組儲存第一組資料,ans數組儲存結果。當輸入第二組資料的時候,一邊進行運算一邊儲存結果。最後按照指數遞減的順序輸出所有不為0的項~

注意:因為相乘後指數可能最大為2000,是以ans數組最大要開到2001

版權所有:可定部落格 © WNAG.COM.CN

本文标題:《簡單模拟》

本文連結:https://wnag.com.cn/933.html

特别聲明:除特别标注,本站文章均為原創,本站文章原則上禁止轉載,如确實要轉載,請電聯:[email protected],尊重他人勞動成果,謝過~