hello,小伙伴们,大家好,废话不多说,先上题:
对长度为n的数组,先实现逆置前m个,再逆置其后面的,最后再整个逆置
关于利用指针逆置主要靠以下小操作;
t=*p,*p=*q.*q=t;
这不就是其核心吗,对,但也不完全对?更重要的在中值的选取:
mid=(末尾数下标+初始数下标)/2;
这一步理解可是关键,你也可以自己写几个数试一下
好了,现在解释为什么有两个标题:
用多次逆置的方法比如: 本题用三次逆置可以实现数组前m个元素移动到末尾,像是数组向左移动了m个长度:例如当m为3时,对数组(0 1 2 3 4 5 6 7 8 9)可至(3 4 5 6 7 8 9 0 1 2)
好了,理解上面之后咱就上代码了:
#include <stdio.h>
int main()
{
int a[100],n,m,t,*p,*q;
scanf("%d",&n);//输入整数个数
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
p = a;
scanf("%d",&m);//输入移动位数
/***** 首先逆置数组前m个元素 *****/