2021.03.31 网易互娱笔试

1 篇文章 0 订阅

2021.03.31 网易互娱笔试
三道编程题,难度都不是很高,简单复述一下题目和解法。

第一题
买卖基金,已知基金会先涨M天,每天赚X元,再跌N天,每天亏Y元(0<M, N <= 1000),以此循环,求你的本金由100000涨到P(100000<P<=10000000)至少需要多少天,如果不可能实现,则返回-1。
解法:简单的数学题,注意判断模数就行

第二题
某人写了一个处理字符串的程序,判断给定一个字符串,该字符串在这个程序中会历经多少个if

void function(char* str)
{
	int flag = 0;
	if(*str == '\0') {
		break;
	}
	if(flag){
		if(*str == 's')
		{
			flag = 0;
		}
		else if(*str == 'd')
		{
			flag = 0;
		}
		else if(*str >= '0' && *str <= '9')
		{
			//
		}
		else if(*str == '%')
		{
			flag = 0;
		}
		else 
		{
			flag = 0;
		}
	}
	else
	{
		if(*str == '%')
		{
			flag = 1;
		}
		else
		{
			//
		}
	}
	++str;
}

大致就是这样的一个程序,可以考虑用空间换时间,毕竟每一个字符的if判断都是固定的,只是会根据flag有变化。

第三题
假设

A = "wo"
B = "goto school"
C = "A B"
D = "C THEN B"

当修改某一变量时会有多少个语句发生变化
比如:

A
B
C
D
THEN

输出:

3
3
2
1
1

解法:其实就是套着字符串皮的拓扑排序,将每个字符串转为图中的结点,但是不同的时需要找到出度为0的结点(不会对其他变量造成影响),删去该结点和所连的入边,对应结点出度-1,并更新关系矩阵,循环判断直到无结点即可,最终输出关系矩阵对应的行中1的数量即可。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值