栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【2022网易雷火】游戏研发笔试-AC代码及题目分享

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【2022网易雷火】游戏研发笔试-AC代码及题目分享

3个小时,4道题目,雷火的题目不在于难,更在于对细节的把控和写大模拟的耐心,花了一个半小时,AC了3.85,直接交卷退了。第一题AC,第二题AC,第三题85%,第四题AC。下面分享一下大致的题意和对应的代码,就不多说了,最近很累(代码可能会有贴错的情况,如有望指正,感谢~)。


T1-小Y抽奖 题意

n行m列个奖励格子,每次抽奖消耗一个道具。每个格子奖励的数量有限且各不相司。每个格子被抽到一次,剩余的奖励数量-1。剩余的奖励数量为0时,则不会再抽到该格子。小Y抽了好多次,但一直没有抽到最想要的奖励,给出示例图中的情况。求再买几个猪心,才能保证抽到一次她想要的奖励。

输入描述

第一行:两个正整救n和m (1<= n, m<=100),表示n*m个奖励格子。
第二行:两个正整数x和y ( 1<= x<= n,1<=y<=m),表示小Y想要抽到的奖励位置(保证小Y想要的奖励剩余数量不为0)。
接下来n行,每行m个整数,表示每个格子的奖励剩余a (0<=a<=1000)。

输出描述

输出一个数字,表示需要买几个道具,才能够保证抽到一次想要的奖励。

样例数据

3 3

1 1

2 5 4

2 7 8

2 3 0

输出

32

废话

遍历操作模拟一下即可

AC_Code 
// 1
#include 
#define ll long long 
using namespace std;
int main()
{
	int n,m,x,y;
	cin>>n>>m>>x>>y;
    vector> a(n+1, vector(m+1));
	for(int i=1; i<=n; i++) 
		for(int j=1; j<=m; j++) 
			cin>>a[i][j];
    int sum=0;
	for(int i=1; i<=n; i++) 
		for(int j=1; j<=m; j++) 
            if(i==x && j==y) sum+=1;
            else sum += a[i][j];
    cout< 

T2-打魔法牌 题意

—套牌共N张,每张有数字和类别两个特征,数字范围为1~10,类别为A,B,C,D,E。要计算这套牌的倍数,默认1倍,有特殊的组合可以有更大的倍数(具体规则在图里面,真记不得了QAQ)。

输入描述

第一行:一个整数M(1<=M<= 1000),表示有M组数据;每组教据先输入N(1<= N<=5),表示这套牌的张数;接下来两行,第一行是N个数字,表示N张牌的点数。第二行N个字母,表示对应的N张牌的花色。

输出描述

每组数据输出对应的套牌的倍数。

样例数据

输入
2
5
9 9 9 9 9 A B C D E 5
3 2 1 10 9 A A A A A
输出
15000
300

废话 

和T3一样,细节模拟题,写的有点长了

AC_Code
// 2
#include 
#include 
#include 
#include 
#define ll long long
const int N = 1e6+10;
using namespace std;
char s[2];

int main()
{
    ios::sync_with_stdio(false);
	int t;  cin>>t;
    while(t--) {
        int n;  cin>>n;
        vector a(n), op(n);
        for(int i=0; i> a[i];
        
        for(int i=0; i> s;
            op[i] = s[0] - 'A' + 1;
        }
        
        auto check1 =[&] () {
            int mi = *min_element(a.begin(), a.end());
            int ma = *max_element(a.begin(), a.end());
            return mi == ma && n == 5;
        };
        
        auto check2 =[&] () {
            int mi = *min_element(op.begin(), op.end());
            int ma = *max_element(op.begin(), op.end());
            auto tmp = a;
            sort(tmp.begin(), tmp.end());
            bool ok = true;
            for(int i=1; i 

T3-字母语句大模拟 题意

按如下要求模拟:

1. 每一行字符个数上限N(N>=20),允许不填满N个。
2. 输入所有单词的长度<=N,单词不能分割在两行显示。如果当前行无法完整显示,则放到下一行显示。
3. 对于2的情兄,有一些特殊情况:如果当前行的最后一个单词只能部分显示在当前行,会导致当前行长度大于N,不满足。显示在下一行则当前行长度小于N,浪费当前行的长度。此时,如果提升当前行长度为N+M。(0<=M<=5,当前行允许显示N+M个字符),就能在当前行完整显示,则允许突破。该突破在当前行最多只能一次。
4. 语句只有三种类型字符:26个字母大小写都认定为英文,连续英文组成单词;空格单独类(不存在连续空格);其他都是标点符号(假定只存在长度为1的标点)。
5. 行首不能以空格开头。行首出现空格,则空格直接去掉。行末的空格强制去掉。
6. 行首不能以标点符号开头。标点符号开头则允许无条件突破前一行个数上限,将标点放在前一行末尾。无条件指不管前一行长度是多少,标点都可以放存末尾。

废话

这题没啥意思,就是硬模拟,但是细节出错没有AC,也就没找了

Code (85%)
#include 
#include 
#include 
#include 
#define ll long long
const int N = 710;
using namespace std;

int main()
{
	auto is_zm = [&] (char c) {
		return c >= 'a' && c<='z' || c>='A' || c<='z';
	};
	auto is_bd = [&] (string s) {
		return s.length()==1 && !is_zm(s[0]);
	};
	int n,m; cin>>n>>m;
	getchar();
	string s,a;
	vector v;
	getline(cin, s);
	stringstream in(s);
	
	while(in>>a) {
		int l = a.length();
		if(is_zm(a[l-1]))  v.push_back(a);
		else {
			v.push_back(a.substr(0, l-1));
			string tmp = "";
			tmp.push_back(a[l-1]);
			v.push_back(tmp);
		}
	}
	
	vector ans;
	string line="";
	int k = v.size();
	for(int i=0; in) ok=0;
		if(len>0) {
			if(ok && len+1 

T4-藏宝图 题意

水面每小时上涨1米。宝藏必须用船运回,只有当水面涨到同时淹没人和宝藏位置时,人才能驾船取回宝藏(假设船只能从当前位置向上下左右行驶)。求至少需要等待多少小时才能收获宝藏。

输入描述

第一行:两个整教N M,表示群岛长宽。(1<=N<= 700, 1<=M<=700)
第二行:两个整数X Y,表示人当前所在位署,X为行,Y为列(1 第三行:两个整数Z W,表示宝藏所处位署,Z为行,W为列(1 之后一个N行M的二维整数数组,每个数字表示当前坐标位署处的每拔高度H(0<=H 输出描述

最早T小时可以获得宝藏

废话

这种图相关的题目一般用最短路算法或者并查集来解决

AC_Code
#include 
#include 
#include 
#include 
#define ll long long
const int N = 710;
using namespace std;

struct Edge{
	int a,b,w;
	bool operator < (const Edge &e) const {
		return w> a(n+1, vector (m+1));
	for(int i=1; i<=n; i++) 
		for(int j=1; j<=m; j++) 
			scanf("%d",&a[i][j]);
			
	if(sx==ex && sy==ey) {
		cout<<"0"<1) edge[++t] = { get(i-1,j), get(i,j), max(a[i-1][j], a[i][j]) };
			if(j>1) edge[++t] = { get(i,j), get(i,j-1), max(a[i][j-1], a[i][j]) };
		}
	sort(edge+1, edge+t+1);
	
	vector fa(n*m+1);
	for(int i=1; i<=n*m; i++)  fa[i]=i;
	function find = [&] (int n) {
		return fa[n] == n?n:fa[n]=find(fa[n]);	
	};
	
	int ps = get(sx, sy), pe=get(ex, ey);
	for(int i=1; i<=t; i++) {
		int a = edge[i].a, b = edge[i].b, w = edge[i].w;
		int fax = find(a), fay = find(b);
		if(fax!=fay) fa[fax] = fay;
		int fps = find(ps), fpe = find(pe);
		if(fps==fpe) {
			cout< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/783805.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号