1008 陣列元素回圈右移問題 (20分)
題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808

輸入格式:
每個輸入包含一個測驗用例,第1行輸入N(1≤N≤100)和M(≥0);第2行輸入N個整數,之間用空格分隔,
輸出格式:
在一行中輸出回圈右移M位以后的整數序列,之間用空格分隔,序列結尾不能有多余空格,
輸入樣例
6 2
1 2 3 4 5 6
輸出樣例
5 6 1 2 3 4
我的理解
出看題目,還在想移動陣列位置,回圈右移,即向右移動的程序中,超過陣列邊界的元素從元素左邊補上,中間想著用臨時變數保存被覆寫的元素,可是想著想著就出現了另外陣列的身影、、、,可也正是題目的要求不允許使用另外的陣列,可這該怎么辦呢?靈機一動,其實沒必要真的移動元素,只要表現起來像是移動了就可以了,稍微的“欺騙”一下計算機,只需要首先輸出第n-m個元素到第n個元素,然后再輸出第0個到第n-m個元素即可,

也可以將右移后的元素的新的下標和之前的下標做個映射,反正訪問的時候進行處理就好了,表現出來就像是右移了,邏輯映射處理為 index += n - m ,

代碼段
#include<iostream>
using namespace std;
int main() {
int n = 0;
int m = 0;
cin >> n >> m;
int number[n];
for (int i = 0; i < n; i++) {
cin >> number[i];
}
// 如果右移的量比較大,甚至發生了回圈了一遍一遍又一遍,此時對右移的量進行處理,使其在一遍回圈之內
m %= n;
for (int i = n - m; i < n; i++) {
cout << number[i] << " ";
}
for (int i = 0; i < n - m; i++) {
if (i != n - m - 1) {
cout << number[i] << " ";
} else {
cout << number[i];
}
}
cout << endl;
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/110933.html
標籤:其他
上一篇:遞回演算法總結
下一篇:字典樹的建立和基本查找
