《程式設計思維與實踐》week13 作業題

2021-10-06 08:13:07 字數 3270 閱讀 9482

這一天,tt 遇到了乙個神秘人。

神秘人給了兩個數字,分別表示 n 和 k,並要求 tt 給出 k 個奇偶性相同的正整數,使得其和等於 n。

例如 n = 10,k = 3,答案可以為 [4 2 4]。

tt 覺得這個任務太簡單了,不願意做,你能幫他完成嗎?

本題是spj

第一行乙個整數 t,表示資料組數,不超過 1000。

之後 t 行,每一行給出兩個正整數,分別表示 n(1 ≤ n ≤ 1e9)、k(1 ≤ k ≤ 100)。

如果存在這樣 k 個數字,則第一行輸出 「yes」,第二行輸出 k 個數字。

如果不存在,則輸出 「no」。

8103

100487

97288

31053

1000000000

9

yes42

4yes555

535nono

yes111

1111

1noyes311

yes111111110

111111110

111111110

111111110

111111110

111111110

111111110

111111110

111111120

大致分成兩種情況:

(1) n < k : 肯定不能實現,直接輸出「no」;

(2) n >= k :

如果是奇數類,將k - 1 個數全部置1,判斷剩下的n - k + 1 的奇偶情況,如果是奇數,那麼滿足;

如果是偶數類,將k - 1 個數全部置2,判斷剩下的n - 2 * (k - 1) 的奇偶情況,如果是偶數,那麼滿足;

#include

#include

#include

using

namespace std;

int t, n, k;

intmain()

int s1 = n - k +1;

//k - 1 個 1

int s2 = n -2*

(k -1)

;//k - 1 個 2

if(s1 %2==

1)if(s2 <=0)

if(s2 %2==

0)cout<<

"no"

<}}

在你們的幫助下,tt 輕鬆地完成了上乙個神秘任務。

但是令人沒有想到的是,幾天後,tt 再次遇到了那個神秘人。

而這一次,神秘人決定加大難度,並許諾 tt,如果能夠完成便給他乙個獎勵。

任務依舊只給了兩個數字,分別表示 n 和 k,不過這一次是要求 tt 給出無法被 n 整除的第 k 大的正整數。

例如 n = 3,k = 7,則前 7 個無法被 n 整除的正整數為 [1 2 4 5 7 8 10],答案為 10。

好奇的 tt 想要知道獎勵究竟是什麼,你能幫幫他嗎?

第一行乙個整數 t,表示資料組數,不超過 1000。

之後 t 行,每一行給出兩個正整數,分別表示 n(2 ≤ n ≤ 1e9)、k(1 ≤ k ≤ 1e9)。

對於每一組資料,輸出無法被 n 整除的第 k 大的正整數。

637

41221000000000797

1000000000

1000000000

21

10

151999999999

1131000000001

1

對於輸入的數n,從1開始,每n個數中就有n - 1個是不能被n整除的,所以只需要判斷是第幾段n - 1中的第幾個就可以了

#include

#include

#include

using

namespace std;

int t, n, k;

intmain()

return0;

}

在大家不辭辛勞的幫助下,tt 順利地完成了所有的神秘任務。

神秘人很高興,決定給 tt 乙個獎勵,即白日做夢之撿貓咪遊戲。

撿貓咪遊戲是這樣的,貓咪從天上往下掉,且只會掉在 [0, 10] 範圍內,具體的座標範圍如下圖所示。

tt 初始站在位置五上,且每秒只能在移動不超過一公尺的範圍內接住掉落的貓咪,如果沒有接住,貓咪就會跑掉。例如,在剛開始的一秒內,tt 只能接到

四、五、六這三個位置其中乙個位置的貓咪。

喜愛貓咪的 tt 想要接住盡可能多的貓咪,你能幫幫他嗎?

多組樣例。每組樣例輸入乙個 m (0 < m < 100000),表示有 m 只貓咪。

在接下來的 m 行中,每行有兩個整數 a b (0 < b < 100000),表示在第 b 秒的時候有乙隻貓咪掉落在 a 點上。

注意,同乙個點上同一秒可能掉落多隻貓咪。m = 0 時輸入結束。

輸出乙個整數 x,表示 tt 可能接住的最多的貓咪數。

651

4161

7272

830

4
用dp[ ] [ ] 陣列儲存能夠接住的貓咪.

狀態轉移方程:

第 i 秒,是從第(i - 1)秒轉移過來的,而第 j 個位置只能從 j / j + 1/ j - 1 轉移而來。

f[ i ][ j ] += max;

#include

#include

#include

using

namespace std;

int m, a, b;

int symbol;

int dp[

100010][

12];int

main()

for(

int i = symbol -

1; i >=

0; i--

)for

(int j =

0; j <

11; j++

) dp[i]

[j]+

=max

(dp[i +1]

[j +1]

,max

(dp[i +1]

[j], dp[i +1]

[j -1]

));

cout<[5

]<}return0;

}

Week13 作業 必做

a tt 的神秘任務1 這一天,tt 遇到了乙個神秘人。神秘人給了兩個數字,分別表示 n 和 k,並要求 tt 給出 k 個奇偶性相同的正整數,使得其和等於 n。例如 n 10,k 3,答案可以為 4 2 4 tt 覺得這個任務太簡單了,不願意做,你能幫他完成嗎?本題是spj input 第一行乙個...

Week13作業 選做題D

題意 在大家的三連助攻下,tt 一舉獲得了超級多的貓咪,因此決定開一間貓咖,將快樂與大家一同分享。並且在開業的那一天,為了紀念這個日子,tt 在貓咖門口種了一棵蘋果樹。一年後,蘋果熟了,到了該摘蘋果的日子了。已知樹上共有 n 個節點,每個節點對應乙個快樂值為 w i 的蘋果,為了可持續發展,tt 要...

程式設計思維與實踐 Week2 作業

b題 倒水問題 bfs 東東有一張地圖,想通過地圖找到妹紙。地圖顯示,0表示可以走,1表示不可以走,左上角是入口,右下角是妹紙,這兩個位置保證為0。既然已經知道了地圖,那麼東東找到妹紙就不難了,請你編乙個程式,寫出東東找到妹紙的最短路線。input 輸入是乙個5 5的二維陣列,僅由0 1兩數字組成,...