6-1 循环移位 (100分)
设计函数void shift(int *array , int num , int size ) ;,实现将整型数组内元素循环向左移若干位置。循环向左移位含义如下:
比如,原始数组a[0],a[1]…a[9]内元素依次为:1 2 3 4 5 6 7 8 9 10,循环向左移1位后,则a[0],a[1]…a[9]内元素依次为:2 3 4 5 6 7 8 9 10 1,循环向左移2位后,则a[0],a[1]…a[9]内元素依次为:3 4 5 6 7 8 9 10 1 2。依次类推。
函数接口定义:
void shift(int *array , int num , int size ) ;
其中 array 、 num和 size 都是用户传入的参数。 array 为指向原始数组的指针; num 为向左移的位数;size 为数组的大小。函数没有返回值。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
void shift(int *array , int num , int size ) ;
int main()
{
int i , n , p , array[100] ;
scanf(" %d%d" , &n , &p ) ;//测试用例保证0<p<n<=100
for( i = 0 ; i < n ; i++ )
scanf( "%d" , &array[i] ) ;//测试用例保证所有输入可以用整型存储
shift( array , p , n ) ;//向左移p位
for( i = 0 ; i < n - 1 ; i++ )
printf( "%d " , array[i] ) ;
printf( "%d\n" , array[i] ) ;
return 0;
}
输入样例:
10 1
1 2 3 4 5 6 7 8 9 10
输出样例:
2 3 4 5 6 7 8 9 10 1
void shift(int *array , int num , int size ) {
int c;
for (int i = 0; i < num; i++) {
c=array[0];
for (int j = 0; j <size-1 ; j++) {
array[j]=array[j+1];
}
array[size-1]=c;
}
}