网易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>
#include <cstdio>
#include<deque>
using namespace std;
int main(){
    int n;
	int *input;
    while(cin>>n){
        deque<int> qu;
        input = new int[n];
        for(int i = 0 ; i < n ; ++i)
            cin >> input[i];
        
        for(int i = 0 ; i < n ; ++i){
            if(i&1){
                qu.push_back(input[i]);
            }
            else{
                qu.push_front(input[i]);
            }
        }
        
        if(n&1){
            while(qu.size()>1){
                cout<<qu.front()<<' ';
                qu.pop_front();
            }
            cout<<qu.front();
			qu.pop_front();
        }
        else{
            while(qu.size()>1){
                cout<<qu.back()<<' ';
                qu.pop_back();
            }
            cout<<qu.back();
			qu.pop_back();
        }
        delete input;
    }
    return 0;
}
第二题:独立的小易
小易为了向他的父母表现他已经长大独立了,他决定搬出去自己居住一段时间。一个人生活增加了许多花费: 小易每天必须吃一个水果并且需要每天支付x元的房屋租金。当前小易手中已经有f个水果和d元钱,小易也能去商店购买一些水果,商店每个水果售卖p元。小易为了表现他独立生活的能力,希望能独立生活的时间越长越好,小易希望你来帮他计算一下他最多能独立生活多少天。 
输入描述:
输入包括一行,四个整数x, f, d, p(1 ≤ x,f,d,p ≤ 2 * 10^9),以空格分割
输出描述:
输出一个整数, 表示小易最多能独立生活多少天。
输入例子1:
3 5 100 10
输出例子1:
11
#include <iostream>
#include <cstdio>
#include<deque>
using namespace std;
int main(){
    int x , f, d, p;
    while(cin>>x>>f>>d>>p){
        if(d > x*f){
            int ret = 0;
            d -= x*f;
            ret += f;
            ret += d/( x + p);
            cout<<ret;
        }
        else{
            cout<<d/x;
        }
    }
    return 0;
}

  

第三题:疯狂队列

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

如样例所示: 
当队列排列顺序是: 25-10-40-5-25, 身高差绝对值的总和为15+30+35+20=100。
这是最大的疯狂值了。
输入例子1:
5
5 10 25 40 25
输出例子1:
100

#include<iostream>
#include<cstdio>
#include<deque>
#include<algorithm>
#include<math.h>
using namespace std;
int main(){
	int n;
	int *input;
	while(cin>>n){
        if(n < 1){
            cout<<0;
            continue;
        }
        
		input = new int[n];
		for(int i = 0 ; i < n ; ++i){
			cin>>input[i];
		}
        sort(input , input + n);
        
		deque<int> out;
		
		int l = 0 ,r = n - 1;
		out.push_back(input[r--]);
		bool flag = true;
        
		while(r > l){
			if(flag){
				out.push_front(input[l++]);
				out.push_back(input[l++]);
				flag = false;
			}
			else{
				out.push_front(input[r--]);
				out.push_back(input[r--]);
				flag = true;
			}
		}
        
		if(l == r){
			out.push_front(input[l]);
		}
        
		int ret = 0 , temp;
		while(out.size()>1){
			temp = out.front();
			out.pop_front();
			ret += abs(out.front() - temp);
		}
        
		cout<<ret;
		delete input;
	}
	return 0;
}

  





原文地址:https://www.cnblogs.com/jhmu0613/p/7360160.html