网易互娱2018校招游戏研发工程师在线笔试

这篇博客介绍了网易互娱2018年校招游戏研发工程师在线笔试的题目,包括多个逻辑和算法问题,如时间调整、排序与前缀和、技能冷却与战斗策略、贪心与全排列等,旨在考察应聘者的编程思维和问题解决能力。
摘要由CSDN通过智能技术生成

如果题目版权限制,不能发表该题解,请私信,我会立刻删除博客。




题目描述

注意:本题只允许使用C/C++或Java进行解答,其他编程语言提交均视作无效处理。

小W有一个电子时钟用于显示时间,显示的格式为HH:MM:SS,HH,MM,SS分别表示时,分,秒。其中时的范围为[‘00’,‘01’…‘23’],分的范围为[‘00’,‘01’…‘59’],秒的范围为[‘00’,‘01’…‘59’]。

但是有一天小W发现钟表似乎坏了,显示了一个不可能存在的时间“98:23:00”,小W希望改变最少的数字,使得电子时钟显示的时间为一个真实存在的时间,譬如“98:23:00”通过修改第一个’9’为’1’,即可成为一个真实存在的时间“18:23:00”。修改的方法可能有很多,小W想知道,在满足改变最少的数字的前提下,符合条件的字典序最小的时间是多少。其中字典序比较为用“HHMMSS”的6位字符串进行比较。

输入描述:

每个输入数据包含多个测试点。每个测试点后有一个空行。 第一行为测试点的个数T(T<=100)。 每个测试点包含1行,为一个字符串”HH:MM:SS”,表示钟表显示的时间。

输出描述:

对于每个测试点,输出一行。如果钟表显示的时间为真实存在的时间,则不做改动输出该时间,否则输出一个新的”HH:MM:SS”,表示修改最少的数字情况下,字典序最小的真实存在的时间。
示例1

输入

2
19:90:23
23:59:59

输出

19:00:23
23:59:59

【 网易互娱2018校招游戏研发工程师在线笔试 A】【水题】

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<ctype.h>
#include<math.h>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#include<algorithm>
#include<time.h>
using namespace std;
void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); }
#define MS(x, y) memset(x, y, sizeof(x))
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T1, class T2>inline void gmax(T1 &a, T2 b) { if (b > a)a = b; }
template <class T1, class T2>inline void gmin(T1 &a, T2 b) { if (b < a)a = b; }
const int N = 0, M = 0, Z = 1e9 + 7, inf = 0x3f3f3f3f;
template <class T1, class T2>inline void gadd(T1 &a, T2 b) { a = (a + b) % Z; }
int casenum, casei;
int h, m, s;
char S[10];
int a[10], b[10];
struct ANS
{
	int h, m, s;
}ans;

//简单做法
void simple()
{
	int h, m, s;
	scanf("%d:%d:%d", &h, &m, &s);
	if (h >= 24)h %= 10;
	if (m >= 60)m %= 10;
	if (s >= 60)s %= 10;
	printf("%02d:%02d:%02d\n", h, m, s);
}

//复杂暴力做法
void complex()
{
	scanf("%s", S);
	a[0] = S[0] - 48;
	a[1] = S[1] - 48;
	a[2] = S[3] - 48;
	a[3] = S[4] - 48;
	a[4] = S[6] - 48;
	a[5] = S[7] - 48;
	//60 * 60 * 24
	int ansdif = inf;
	for (int i = 0; i < 24; ++i)
	{
		b[0] = i / 10;
		b[1] = i % 10;
		for (int j = 0; j < 60; ++j)
		{
			b[2] = j / 10;
			b[3] = j % 10;
			for (int k = 0; k < 60; ++k)
			{
				b[4] = k / 10;
				b[5] = k % 10;

				int dif = 0;
				for (int u = 0; u <= 5; ++u)
				{
					dif += (a[u] != b[u]);
				}
				if (dif < ansdif)
				{
					ansdif = dif;
					ans = { i,j,k };
				}
			}
		}
	}
	printf("%02d:%02d:%02d\n", ans.h, ans.m, ans.s);
}
int main()
{
	scanf("%d", &casenum);
	for (casei = 1; casei <= casenum; ++casei)
	{
		simple();
	}
	return 0;
}
/*
【题意】
略

【分析】
可以直接暴力枚举所有时刻取一个最优的。
也可以对时、分、秒 三个数整体判定,如果不合法,把数的十位数变成0即可。

【时间复杂度&&优化】
O(1)

*/




题目描述

注意:本题只允许使用C/C++或Java进行解答,其他编程语言提交均视作无效处理。

字符迷阵是一种经典的智力游戏。玩家需要在给定的矩形的字符迷阵中寻找特定的单词。
在这题的规则中,单词是如下规定的:
1. 在字符迷阵中选取一个字符作为单词的开头;
2. 选取右方、下方、或右下45度方向作为单词的延伸方向;
3. 以开头的字符,以选定的延伸方向,把连续得到的若干字符拼接在一起,则 称为一个单词

以图1为例,如果要在其中寻找单词"WORD",则绿色框所标示的都是合法的方案,而红色框所标示的都是不合法的方案。
现在的问题是,给出一个字符迷阵,及一个要寻找的单词,问能在字符迷阵中找到多少个该单词的合法方案。注意合法方案是可以重叠的,如图1所示的字符迷阵,其中单词"WORD"的合法方案有4种。

输入描述:

输入的第一行为一个正整数T,表示测试数据组数。 接下来有T组数据。每组数据的第一行包括两个整数m和n,表示字符迷阵的行数和列数。接下来有m行,每一行为一个长度为n的字符串,按顺序表示每一行之中的字符。再接下来还有一行包括一个字符串,表示要寻找的单词。  数据范围: 对于所有数据,都满足1<=T<=9,且输入的所有位于字符迷阵和单词中的字符都为大写字母。要寻找的单词最短为2个字符,最长为9个字符。字符迷阵和行列数,最小为1,最多为99。 对于其中50%的数据文件,字符迷阵的行列数更限制为最多为20。

输出描述:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值