[编程题] 操作序列 网易2018

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[编程题] 操作序列 网易2018相关的知识,希望对你有一定的参考价值。

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

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



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

 

输入例子1:
4
1 2 3 4

 

输出例子1:
4 2 1 3


先上暴力解法,测试超时。
#include<iostream>
using namespace std;
int ReverseArray(int arr[], int n)
{
    int temp;
    int i;
    for (i=0;i<n/2;i++) {
        temp     = arr[i];
        arr[i]   = arr[n-1-i];
        arr[n-1-i] = temp;
    }
    return 0;
}
int main()
{

    int n;
    
    cin>>n;
    int* a = new int[n];
    int* b = new int[n];
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    
    for(int i=0;i<n;i++)
    {
        b[i]=a[i];
        ReverseArray(b,i+1);
    }
    
    for(int i=0;i<n-1;i++)
    {
         cout<<b[i]<<" ";   
    }
    cout<<b[n-1];
}

实验发现:

个数是奇数的时候:奇数放在左边,偶数放在右边 
个数是偶数的时候:偶数放在左边,奇数放在右边

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5;

int main(){
    int n;
    cin>>n;
    int a[maxn];
    for(int i = 1;i<=n;i++){
        cin>>a[i];
    }
    if(n % 2) {
        for(int i = n; i >= 1; i -= 2) cout<<a[i]<<" ";
        for(int i = 2; i <= n; i += 2) 
           i == n - 1 ? cout<<a[i]: cout<<a[i]<<" ";
    } else {
        for(int i = n; i >= 1; i -= 2) cout<<a[i]<<" ";
        for(int i = 1; i <= n; i += 2)
           i == n - 1 ? cout<<a[i]: cout<<a[i]<<" ";
    }
    cout<<endl;
    return 0;
}

 

以上是关于[编程题] 操作序列 网易2018的主要内容,如果未能解决你的问题,请参考以下文章

[编程题] 彩色的砖块 网易2018

网易2018校招内推编程题集合

[编程题] 等差数列 网易2018

[编程题] 堆棋子 网易2018

网易2017秋招编程题——回文序列 解题报告

网易2018年实习生春招-编程题