输入n个整数,把第i到j之间的全部元素进行逆置(1 ≤ i < j ≤ n),输出逆置后的n个数。请用指向数组元素的指针变量完成。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。
每组测试数据首先输入n,i,j(含义如上描述),然后再输入n个整数。
输出格式:
对于每组测试数据,输出逆置后的n个整数。每两个数据之间留1个空格。
输入样例:
2
7 2 6 11 22 33 44 55 66 77
5 1 5 11 22 33 44 55
输出样例:
11 66 55 44 33 22 77
55 44 33 22 11
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路
- 先输入一个正整数
T
,表示测试数据的组数。 - 使用
while
循环依次处理每组测试数据。 - 每组测试数据输入三个整数
n
、i
和j
,分别表示数组元素个数和要逆置的子区间[i, j]
。 - 接下来输入
n
个整数,存储到数组a
中。 - 调用
nizhi()
函数对数组a
进行逆置操作,将第i
到第j
个元素进行逆置。函数中使用双指针法实现逆置操作。 - 最后遍历数组
a
,依次输出每个元素,并在元素之间输出一个空格,最后一个元素后面输出换行符\n
。
注意
数组空间至少要给1000,否则要越界
代码
#include<stdio.h>
void nizhi(int a[],int i,int j)
{
int t;
while(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
i++;
j--;
}
}
int main()
{
int T,n,i,j,m,a[1000];
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&i,&j);
for(m=0;m<n;m++)
{
scanf("%d",&a[m]);
}
nizhi(a,i-1,j-1);
for(m=0;m<n;m++)
{
if(m==n-1)
printf("%d\n",a[m]);
else
printf("%d ",a[m]);
}
}
return 0;
}