- 题目描述
有n个整数,使前面各数顺序向后移动k个位置,移出的数再从开头移入。输出移动后的数组元素。
题目没有告诉你n的范围,希望你读入n之后用malloc()函数动态申请内存空间,不要提前定义数组的大小。不要偷懒哦。
另外要求定义并使用函数ringShift()
void ringShift(int *a, int n, int k)
{
//循环移动后的数值仍然存入数组a中
}
-
输入
输入分3行,第一行是一个整数n,第二行是n个整数,用空格隔开。第三行是一个整数k。
-
输出
输出n个整数,由空格隔开。输出占一行。
- 样例输入
6 1 2 3 4 5 6 2
- 样例输出
5 6 1 2 3 4
- 考察指针的初步运用,动态内存的申请
#include<stdio.h>
#include <stdlib.h> //包含malloc函数的头文件
void ringShift(int *a, int n, int k)
{
int i ,j ,temp ;
for(i = 0;i < k;i++ )
{
temp = a[n-1];
for(j = n-2;j >= 0;j-- )
{
a[j+1] = a[j];
}
a[0] = temp;
}
}
int main()
{
int flag = 0;
int i, n ,k ;
scanf("%d", &n);
int *s1 = (int *)malloc(n*sizeof(int)); //申请动态内存空间
for(i = 0;i < n;i++)
{
scanf("%d", &s1[i]);
}
scanf("%d", &k);
ringShift(s1,n,k);
for(i = 0;i < n;i++)
{
if(flag == 0)
{
printf("%d", s1[i]);flag++;
}
else printf(" %d", s1[i]);
}
free(s1);
s1 = NULL; //防止后面的程序再用到
return 0;
}