題目:
一個數組A中存有 個整數,在不允許使用另外數組的前提下,將每個整數循環向右移 個位置,即將A中的數據由: 變換: (最後M個數循環移至最前面的M個位置)。如果需要考慮程序移動數據的次數儘量少,要如何設計移動的方法?
輸入格式:
每個輸入包含一個測試用例,第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,即一共移動了幾位,然後根據移動位數,先以此輸出第 % 位到最後一位,然後從第1位開始輸出到第 % 位即可
AC代碼:
#include<iostream>
using namespace std;
void Input(int n, int num[])
{
int i;
cout << "請輸入" << n << "個數字:";
for (i = 0; i < n; i++)
cin >> num[i];
}
void Output(int n, int s, int num[])
{
int i;
if (s == 0) // 不進行移動
{
for (i = 0; i < n - 1; i++)
cout << num[i];
}
else
{
for (i = n - s; i < n; i++)
cout << num[i];
for (i = 0; i < n - s - 1; i++)
cout << num[i];
}
cout << num[i]; //輸出最後一個數字
}
int main(void)
{
int N, M,S, Num[105];
cout << "請輸入兩個數字:";
cin >> N >> M;
Input(N, Num);
S = M % N; //求出要移動的位數
Output(N, S, Num);
return 0;
}