Description
编写程序,将一维数组A(下标从1开始)中的元素循环右移k位,要求只用一个元素大小的附加存储。
Input
第一行输入一维数组A的长度n和循环位移位数k(0<n<100;0<k<100),用空格分开。
第二行输入n个元素。
Output
输出循环右移k位后的一维数组。
- Sample Input
6 3 1 2 3 4 5 6 - Sample Output
4 5 6 1 2 3
#include <iostream>
#include <cstdio>
using namespace std;
void Swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void Reverse(int *a, int *b)
{
while(a < b)
Swap(a++, b--);
}
void Shift(int a[], int k, int n)
{
Reverse(a, a+n-1);
Reverse(a, a+k-1);
Reverse(a+k, a+n-1);
}
int main()
{
int a[100], n, k;
int i;
scanf("%d %d", &n,&k);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
Shift(a, k, n);
for(i = 0; i < n-1; i++)
printf("%d ", a[i]);
printf("%d\n",a[i]);
return 0;
}
282

被折叠的 条评论
为什么被折叠?



