【正确答案】
【答案解析】有n个整数,使前面各数后移m个位置,最后m个数变成最前面m个数。例如,有10个数的数组,即n=10,它们的值分别是1,2,3,4,5,6,7,8,9,10,如果取m=5的话,经过位置调整后,变为6,7,8,9,10,1,2,3,4,5。
可以通过递归的方法实现调整:
1)将前m个元素的顺序颠倒。
2)将后面n-m个元素的顺序颠倒。
3)将n个元素的顺序全部颠倒。
通过以上3个步骤的执行,就可以把数组的元素颠倒。以上例而言,第一步以后,数组顺序变为5,4,3,2,1,6,7,8,9,10;第二步以后,数组顺序变为5,4,3,2,1,10,9,8,7,6;第三步以后,数组顺序变为6,7,8,9,10,1,2,3,4,5,正是题目要求的,此时结束运算。
程序代码示例如下:
#include<stdio.h>
void func(int* start,int* end)
{
while(start<end)
{
int temp=*start;
*start=*end;
*end=temp;
++start;
--end;
}
}
void f(int n,int m,int* numbers)
{
func(numbers,numbers+m-1); ∥前m个数顺序颠倒
func(numbers+m,numbers+n-1); ∥后n-m个数顺序颠倒
func(numbers,numbers+n-1); ∥所有数顺序颠倒
}
int main()
{
int array[]={1,2,3,4,5,6,7,8,9,10};
int len=sizeof(array)/sizeof(array[0]);
int i;
f(len,5,array);
for(i=0;i<len;i++)
printf("%d",array[i]);
return 0;
}
程序输出结果:
6 7 8 9 10 1 2 3 4 5