题目描述
有n个整数,使前面各数顺序向后移动k个位置,移出的数再从开头移入。输出移动后的数组元素。
题目没有告诉你n的范围,希望你读入n之后用malloc()函数动态申请内存空间,不要提前定义数组的大小。不要偷懒哦。
另外要求定义并使用函数ringShift()
void ringShift(int *a, int n, int k)
{
//循环移动后的数值仍然存入数组a中
}
输入
输入分3行,第一行是一个整数n,100以内
第二行是n个整数,用空格隔开。100以内
第三行是一个整数k。
输出
输出n个整数,由空格隔开。输出占一行。
样例
输入 Copy
6
1 2 3 4 5 6
2
输出 Copy
5 6 1 2 3 4
题解
以下是实现要求的C语言程序,其中包含了动态申请内存空间和使用ringShift()函数来完成数组元素的移位:
#include
#include
void ringShift(int *a, int n, int k);
int main()
{
int n, k, i;
int *arr;
scanf("%d", &n);
arr = (int *)malloc(n * sizeof(int)); // 动态申请内存空间
for (i = 0; i 0; j--)
{
a[j] = a[j-1]; // 后面的数向后移动一位
}
a[0] = tmp; // 最后一个数移到首位
}
}
程序流程如下:
- 首先读入整数n,并利用malloc()函数动态申请n个整型变量大小的内存空间,即创建一个长度为n的数组arr。
- 读入n个整数,并存储在数组arr中。
- 读入整数k。
- 调用函数ringShift()来完成数组元素的移位。
- 输出移位后的数组元素。
- 最后释放动态申请的内存空间。
函数ringShift()的实现:
- 使用两个循环来完成k个位置的移动,外层循环执行k次,内层循环每次将数组元素向后移动一个位置。
- 每次移动前,先保存最后一个数,然后从数组的最后一个位置开始,依次将每个数向后移动一个位置,最后把之前保存的最后一个数移到数组的首位。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net