列表

详情


WY37. 操作序列

描述

小易有一个长度为 n 的整数序列,a_1,...,a_n。然后考虑在一个空序列 b 上进行 n 次以下操作:
1、将 a_i 放入 b 序列的末尾
2、逆置 b 序列
小易需要你计算输出操作 n 次之后的 b 序列。

输入描述

输入包括两行,第一行包括一个整数n(2 ≤ n ≤ 2*10^5),即序列的长度。 第二行包括n个整数 ai (1 ≤ ai ≤ 10^9),即序列a中的每个整数,以空格分割。

输出描述

在一行中输出操作 n 次之后的 b 序列,以空格分割,行末无空格。

示例1

输入:

4
1 2 3 4

输出:

4 2 1 3

原站题解

C++ 解法, 执行用时: 32ms, 内存消耗: 5880KB, 提交时间: 2020-08-22

#include <iostream>

int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
    
  int64_t i, n;
  uint64_t a[200000];

  std::cin >> n;

  for(i = 0; i < n; i++) {
    uint64_t v;

    std::cin >> v;
    a[i] = v;
  }

  for(i = n - 1; i >= 0; i -= 2) std::cout << a[i] << " ";

  if(n % 2) i = 1;
  else i = 0;

  for(; i < n; i += 2) std::cout << a[i] << " ";

  std::cout << std::endl;

  return EXIT_SUCCESS;
}

C 解法, 执行用时: 35ms, 内存消耗: 3112KB, 提交时间: 2021-09-19

#include <stdio.h>
 
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int arr[n];
        int index=0;
        while(index<n)
        {
            scanf("%d",&arr[index++]);
        }
        if(n%2==0)
        {
            for(int i=n-1;i>0;i=i-2)
                printf("%d ",arr[i]);
            for(int i=0;i<n;i=i+2)
            {
                if(i==n-1)
                    printf("%d",arr[i]);
                else
                    printf("%d ",arr[i]);
            }
        }
        else 
        {
            for(int i=n-1;i>=0;i=i-2)
                printf("%d ",arr[i]);
            for(int i=1;i<n;i=i+2)
            {
                if(i==n-1)
                    printf("%d",arr[i]);
                else
                    printf("%d ",arr[i]);
            }
        }
    }
    return 0;
}

上一题