题目

数组元素逆序存放

思路

本题把数组元素首尾对调,得到逆序数组。

设两个下标 i=0j=n-1;当 i<j 时交换 a[i]a[j],然后 i++j-- 向中间收拢。n<=1 时无需交换。

解题分析

原地逆序双指针首尾交换。若允许额外数组,也可 forward 读入 backward 输出,空间换写法简单。

完整程序

#include <stdio.h>

int main(void)
{
    int n, a[1000];
    if (scanf("%d", &n) != 1 || n < 1 || n > 1000) {
        return 1;
    }
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    for (int i = 0, j = n - 1; i < j; i++, j--) {
        int t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
    for (int i = 0; i < n; i++) {
        printf("%d%c", a[i], i + 1 < n ? ' ' : '\n');
    }
    return 0;
}

运行示例

输入:

5
1 2 3 4 5

输出:

5 4 3 2 1