题目描述
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。
输入
输入数据的个数n n个整数 移动的位置m
输出
移动后的n个数
输入输出样例
输入样例1 <-复制
10
1 2 3 4 5 6 7 8 9 10
2
输出样例1
9 10 1 2 3 4 5 6 7 8
AC代码
#include <stdio.h>
// 数列元素移位函数
void shiftElements(int a[], int n, int m)
{
int b[1000]; // 创建一个临时数组用于存储移位后的数列
int i, j, t;
for (i = 0, j = 0; i < n; i++, j++)
{
t = (i + m) % n; // 计算移位后的位置
b[t] = a[i]; // 将元素移动到临时数组中
}
for (i = 0; i < n; i++)
{
a[i] = b[i]; // 将临时数组中的元素复制回原始数组
}
}
int main()
{
int a[1000], n, m;
scanf("%d", &n);
int i;
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
scanf("%d", &m);
shiftElements(a, n, m); // 调用移位函数
for (i = 0; i < n; i++)
{
printf("%d", a[i]);
if (i + 1 != n)
printf(" ");
}
return 0;
}
该代码实现了一个函数 shiftElements()
,用于将数列元素向后移动 m
个位置。
函数中使用了一个临时数组 b
来存储移位后的数列,然后将临时数组中的元素复制回原始数组 a
。
函数通过计算 (i + m) % n
来确定每个元素的移动位置,确保移动后的数列循环。
在主函数中,首先读取数列的长度 n
,然后使用循环读取数列中的元素。
接下来读取移动的位置 m
,并调用 shiftElements()
函数进行数列元素的移位。
最后,使用循环输出移位后的数列元素。
(by 归忆)