1008 陣列元素迴圈右移問題
阿新 • • 發佈:2018-12-21
一個數組A中存有N(>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移M(≥0)個位置,即將A中的資料由(A0A1 ⋯AN−1)變換為(AN−M⋯AN−1 A0 A1 ⋯AN−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
#include<stdio.h>
int main()
{
int i,N,M;
scanf("%d %d",&N,&M); //輸入N位數 右移M位數
M=M%N;
int buf[N+M+1];
for(i=M+1;i<=N+M;i++)
{
scanf("%d",&buf[i]);
}
for(i=M;i>=1;i--)
{
buf[i]=buf[i+N];
}
for(i=1;i<N;i++)
{
printf("%d ",buf[i]);
}
printf ("%d",buf[N]);
}