3.數組元素循環右移問題【數據結構—起步能力自測題】

題目:

  一個數組A中存有 N>0N(>0) 個整數,在不允許使用另外數組的前提下,將每個整數循環向右移 M0M(≥0) 個位置,即將A中的數據由:A0A1AN1A_0 A_1 ⋯A_{N-1}) 變換:ANMAN1A0A1ANM1A_{N-M} ⋯A_{N-1}A_0 A_1 ⋯A_{N-M-1}) (最後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,即一共移動了幾位,然後根據移動位數,先以此輸出第 NN % MM位到最後一位,然後從第1位開始輸出到第NN % M1M-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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章