PTA乙級練習題 topic 1008

2021-10-20 19:14:23 字數 1964 閱讀 7792

1008 陣列元素迴圈右移問題 (20 分)

乙個陣列 a

aa 中存有 n

(>0)

n(>0)

n(>0)

個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移 m(≥

0)

m(≥0)

m(≥0

) 個位置,即將 a

aa 中的資料由 (a0

a1⋯a

n−1)

(a_0a_1⋯ a_)

(a0​a1

​⋯an

−1​)

變換為 (an

−m⋯a

n−1a

0a1⋯

an−m

−1

)(a_⋯a_a_0a_1⋯a_)

(an−m​

⋯an−

1​a0

​a1​

⋯an−

m−1​

) (最後 m

mm 個數迴圈移至最前面的 m

mm 個位置)。如果需要考慮程式移動資料的次數盡量少,要如何設計移動的方法?

輸入格式:

每個輸入包含乙個測試用例,第1行輸入 n(1

≤n

≤100

)n(1≤n≤100)

n(1≤n≤

100)

和 m(≥0

)m(≥0)

m(≥0

);第2行輸入 n

nn 個整數,之間用空格分隔。

輸出格式:

在一行中輸出迴圈右移m位以後的整數序列,之間用空格分隔,序列結尾不能有多餘空格。

輸入樣例:

6 2

1 2 3 4 5 6

輸出樣例:

5 6 1 2 3 4

共 n

nn 個數,右移 m

mm 次, m

mm 大於等於0;

我首先想到的是佇列,根據佇列的特性,取出隊首元素,再將隊首元素入隊,相當於左移1次,那麼要使右移 n

nn 次的話,就相當於左移 n−m

n-mn−

m 次;

如果m

mm 大於 n

nn ,那麼就相當於只右移了 n%m

n\%m

n%m 次。

#include

#include

using

namespace std;

queue<

int> values;

void

logic

(int n,

int m)

;int

main()

logic

(n, m)

;bool first =

true

;for

(int i =

0; i < n; i++

)else

//將隊首元素出隊

values.

pop();

}return0;

}void

logic

(int n,

int m)

}

佇列queue

push()函式:將元素入隊

values.

push

(input)

;

front()函式:獲取隊首元素

values.

front()

;

pop()函式:將隊首元素出隊

values.

pop(

);

用佇列的好處是不用計算下標,一次push&pop就能完成一次左移,右移操作也可以通過左移操作變換過來,所以控制好移動的方向和次數就至關重要;

PTA乙級練習題 topic 1006

1006 換個格式輸出整數 15 分 讓我們用字母b來表示 百 字母s表示 十 用12.n來表示不為零的個位數字 n 10 n 10 n 10 換個格式來輸出任乙個不超過 3 位的正整數。例如234應該被輸出為bbsss1234,因為它有 2 個 百 3 個 十 以及個位的 4。輸入格式 每個測試輸...

PTA練習題 旅遊規劃

有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度 以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。輸入格式 輸入說明 輸入資料的第1行給出4個正整數n m s d,其中n 2 n 50...

PTA 演算法練習題 回溯

1.最佳排程問題 假設有n n 20 個任務由k k 20 個可並行工作的機器完成。完成任務i需要的時間為ti。試設計乙個演算法,對任意給定的整數n和k,以及完成任務i 需要的時間為ti i 1 n。計算完成這n個任務的最佳排程,使得完成全部任務的時間最早。輸入格式 輸入資料的第一行有2 個正整數n...