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_)
(a0a1
⋯an
−1)
變換為 (an
−m⋯a
n−1a
0a1⋯
an−m
−1
)(a_⋯a_a_0a_1⋯a_)
(an−m
⋯an−
1a0
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...