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的数量即可。