有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数(用指针)
时间: 2024-05-03 14:16:33 浏览: 44
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数.
可以用一个数组和两个指针来解决这个问题。具体步骤如下:
1. 声明一个数组,大小为n。
2. 从键盘输入n个整数,存入数组中。
3. 声明两个指针p和q,p指向数组的第一个元素,q指向数组的第m个元素。
4. 将p指针向后移动m个位置,即p = p + m。
5. 将数组中的前m个元素移到数组末尾,即将数组中的元素a[0]~a[m-1]移到a[n-m]~a[n-1]。
6. 将p指针和q指针同时向后移动n-m个位置,即p = p + n - m,q = q + n - m。
7. 输出数组中的元素。
代码如下:
```c
#include <stdio.h>
int main()
{
int n, m, i;
int a[100];
int *p, *q;
// 输入n和m
printf("Enter n and m: ");
scanf("%d %d", &n, &m);
// 输入n个整数
printf("Enter %d integers: ", n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
// 指针p指向第一个元素,q指向第m个元素
p = a;
q = a + m;
// 将p指针向后移动m个位置
p += m;
// 将数组中的前m个元素移到数组末尾
for (i = 0; i < m; i++)
{
int tmp = *p;
*p = a[i];
a[i] = tmp;
p++;
}
// 将p和q指针同时向后移动n-m个位置
p = a + n - m;
q = a + n - m;
// 输出数组中的元素
for (i = 0; i < n; i++)
{
printf("%d ", *q);
q++;
if (q == a + n)
q = a;
}
return 0;
}
```
阅读全文