【笔试记录】网易互娱

1、自动贩卖机

题目

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

代码

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <stack>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <map>
#include <unordered_map>
#include "limits.h"
#include "math.h"
using namespace std;

int main(int argc, const char * argv[]) {
    int n, m;
    cin >> n >> m;
    //每个货物槽的原始价格
    int prices[n];
    for(int i=0; i<n; i++){
        cin >> prices[i];
    }
    //n个货物槽:记录可能被错放的货物的价格
    vector<stack<int> > boxes;
    for(int i=0; i<n; i++){
        stack<int> st;
        boxes.push_back(st);
    }
    //m个人进行操作
    int k, num;
    string hand, action;
    while( m-- ){
        cin >> k; //k次操作
        int left = -1, right = -1; //左右手货物的价格
        int p, totalprice = 0; //总价格
        while( k-- ){
            cin >> hand >> action;
            if( action=="take" ){
                cin >> num;
                if( boxes[num-1].empty() ){
                    p = prices[num-1];
                }else{
                    p = boxes[num-1].top();
                    boxes[num-1].pop();
                }
                totalprice += p;
                if( hand=="left" ){
                    left = p;
                }else{
                    right = p;
                }
            }else if( action=="return" ){
                cin >> num;
                if( hand=="left" ){
                    p = left;
                    left = -1;
                }else{
                    p = right;
                    right = -1;
                }
                boxes[num-1].push(p);
                totalprice -= p;
            }else{ //keep
                if( hand=="left" ){
                    left = -1;
                }else{
                    right = -1;
                }
            }
        }
        cout << totalprice << endl;
    }

    return 0;
}
/*
 5 3
 1 2 3 4 5
 5
 left take 1
 right take 2
 left return 3
 right keep
 right take 4
 6
 left take 5
 right take 1
 left return 2
 right return 3
 left take 5
 left return 4
 10
 left take 1
 left keep
 left take 2
 left keep
 left take 3
 left keep
 left take 4
 left keep
 left take 5
 left keep
 */

2、游戏机刷新帧

题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路

3、迷宫

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路

牛客大佬思路

4、非凡排序

题目

在这里插入图片描述

代码

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <map>
#include <unordered_map>
#include "limits.h"
#include "math.h"
using namespace std;

bool cmp(int a, int b){
    return a > b;
}
int main(int argc, const char * argv[]) {
    //输入有正有负
    int n, num;
    cin >> n;
    vector<int> posi;
    vector<int> nega;
    for(int i=0; i<n; i++){
        cin >> num;
        if( num<0 ){
            nega.push_back(num);
        }else{
            posi.push_back(num);
        }
    }
    //正数更多:整个正数升序排序
    //(负 正 负 正):正数逆序,负数正序 + (正...正)正数升序排序
    if( posi.size() >= nega.size() ){
        sort(posi.begin(), posi.end()); //升序
        sort(nega.begin(), nega.end()); //升序
        int i=0, j=nega.size()-1;
        for(; i<nega.size(); i++,j--){
            cout << nega[i] << " " << posi[j] << " ";
        }
        for(; i<posi.size(); i++){
            cout << posi[i] << " ";
        }
        cout << endl;
    }else{
        //负数整体逆序
        //(正 负 正 负):正数逆序,负数正序 + (负...负)负数逆序
        sort(posi.begin(), posi.end(), cmp); //逆序
        sort(nega.begin(), nega.end(), cmp); //逆序
        int i=0, j=posi.size()-1;
        for(; i<posi.size(); i++, j--){
            cout << posi[i] << " " << nega[j] << " ";
        }
        for(; i<nega.size(); i++){
            cout << nega[i] << " ";
        }
        cout << endl;
    }
    
    
    return 0;
}
/*
 6
 -2 4 -1 3 5 6
 10
 9 8 7 -1 -2 -3 -4 -5 -6 -7
 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值