[编程题] 操作序列 网易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;
}
时间: 2024-11-06 07:23:06

[编程题] 操作序列 网易2018的相关文章

[编程题] 堆棋子 网易2018

小易将n个棋子摆放在一张无限大的棋盘上.第i个棋子放在第x[i]行y[i]列.同一个格子允许放置多个棋子.每一次操作小易可以把一个棋子拿起并将其移动到原格子的上.下.左.右的任意一个格子中.小易想知道要让棋盘上出现有一个格子中至少有i(1 ≤ i ≤ n)个棋子所需要的最少操作次数. 输入描述: 输入包括三行,第一行一个整数n(1 ≤ n ≤ 50),表示棋子的个数 第二行为n个棋子的横坐标x[i](1 ≤ x[i] ≤ 10^9) 第三行为n个棋子的纵坐标y[i](1 ≤ y[i] ≤ 10^

[编程题] 疯狂队列 网易2018

小易老师是非常严厉的,它会要求所有学生在进入教室前都排成一列,并且他要求学生按照身高不递减的顺序排列.有一次,n个学生在列队的时候,小易老师正好去卫生间了.学生们终于有机会反击了,于是学生们决定来一次疯狂的队列,他们定义一个队列的疯狂值为每对相邻排列学生身高差的绝对值总和.由于按照身高顺序排列的队列的疯狂值是最小的,他们当然决定按照疯狂值最大的顺序来进行列队.现在给出n个学生的身高,请计算出这些学生列队的最大可能的疯狂值.小易老师回来一定会气得半死. 输入描述: 输入包括两行,第一行一个整数n(

[编程题] 重排数列 网易2018校招

小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]..., A[N]}.牛博士给小易出了一个难题:对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数.小易现在需要判断一个数列是否可以重排之后满足牛博士的要求. 输入描述: 输入的第一行为数列的个数t(1 ≤ t ≤ 10), 接下来每两行描述一个数列A,第一行为数列长度n(1 ≤ n ≤ 10^5) 第二行为n个正整数A[i](1 ≤ A[i] ≤ 10^9) 输

[编程题] 相反数 网易2018校招

为了得到一个数的"相反数",我们将这个数的数字顺序颠倒,然后再加上原先的数得到"相反数".例如,为了得到1325的"相反数",首先我们将该数的数字顺序颠倒,我们得到5231,之后再加上原先的数,我们得到5231+1325=6556.如果颠倒之后的数字有前缀零,前缀零将会被忽略.例如n = 100, 颠倒之后是1. 输入描述: 输入包括一个整数n,(1 ≤ n ≤ 10^5) 输出描述: 输出一个整数,表示n的相反数 输入例子1: 1325 输出例

[编程题] 字符串碎片 网易2018校招

一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的.例如,"aaabbaaac"是由下面碎片组成的:'aaa','bb','c'.牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的平均长度是多少. 输入描述: 输入包括一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),s只含小写字母('a'-'z') 输出描述: 输出一个整数,表示所有碎片的平均长度,四舍五入保留两位小数. 如样例所示: s = "aaabbaaac" 所

[编程题] 魔法币 网易2018校招

小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币.魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需要你帮他设计一个投入方案使他最后恰好拥有n个魔法币. 输入描述: 输入包括一行,包括一个正整数n(1 ≤ n ≤

编程题-最短序列和(Subsequence)-尺取法

题目: 给定长度为n的整数数列 a0,a1,...,an?1以及整数S,求出总和不小于S的连续自序列的长度最小值.如果不存在,则输出0 样例: 输入 n = 10 S = 15 a = {5 , 1,3 ,5 ,10,7,4,9,2,8} 输出 2 (5 ,10) 思路: 尺取法通常的是保留数组的一对下标(开始到结束),然后根据实际情况交替移动. 我们假设从i开始总和超过S的连续子序列如果为ai,ai+1...ai+j 即 ai+ai+1+...+ai+j≥S 并且 ai+ai+1+...+ai

网易2017秋招编程题集合-牛客网

网易2017秋招编程题集合-牛客网 链接:https://www.nowcoder.com/questionTerminal/0147cbd790724bc9ae0b779aaf7c5b50来源:牛客网 如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列.例如: {1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列. 现在给出一个数字序列,允许使用一

上机操作编程题

一.写一个简单的缓存系统 1 package com.wisezone.demo; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 /** 6 * 上机操作: 7 * 面试题--写一个简单的缓存系统 8 * @author 王东海 9 * @2017年6月5日 10 */ 11 public class CacheDemo 12 { 13 private Map<String, Object> map = new HashMap&