Smartprix 面试经验 |设置 4(校内)
最近,Smartprix 进行了一次池放置驱动。
有两轮:
1.逻辑/技术能力测试
2. 编码轮
第一回合:
第一轮分为两个测试,
1. 逻辑能力测试: 30分钟20题,答对一题扣3分,答错一题扣1分。大多数问题都是基于模式匹配的。除此之外,还有来自系列、缺项和血缘关系的问题。到处都是中级问题。
2. 技术 MCQ 测试:该测试由 30 分钟内的 10 个问题组成。问题来自 c++ 和Java。有些是基于输出的,而有些是基于逻辑测试的。问题是中等水平。
在大约 650 名学生中,有 63 名学生被选中参加下一轮 - 编码轮。
第二轮:
这一轮有 2 道编码问题,应该在 3 小时内完成。问题的水平相当不错。基本上问题是基于你在工作中最有可能面临的实际问题。
问题1。击键:编写一个程序来模拟具有给定键及其操作的键盘。要模拟的键类型为:字母数字空格:按原样打印并移动光标。
@ = 如果关闭则切换大写锁定,反之亦然,最初它是关闭的。
# = 在光标位置插入新行并移动光标。
/ = 删除左边的一个字符并将光标指向该位置。
? = 如果光标位于最后一行,则用作向下箭头,没有任何变化。
^ = 如果光标位于第一行,则用作向上箭头,没有任何变化。
这道题210分。
例子:
Input : asdf#q#pqr^^23
Output :asdf23f
q
pqr
# Python code
string=input()
caps=0
result=[]
j=0
i=0
pos=0
while (i=0):
if(result[j]=='\n'):
if(p_j-j-1=check :
while(check):
j=j+1;
check=check-1
j=j+1
else :
while(result[j]!='\n'):
j=j+1;
j=j-1
elif string[i]=='?':
count=0
p_j=j
while (string[i]=='?'):
count=count+1
i=i+1
j=j-1
if count==1 :
while(count>0):
if result[j]=='\n':
count=count-1
j=j+1
elif count>1 :
while(check):
j=j+1;
check=check-1
j=j+1
else:
if (caps==1) and string[i].islower():
result.insert( j,string[i].upper())
else :
result.insert( j,string[i])
j=j+1
i=i+1
print (''.join(result))
这道题250分。
问题2。这个程序有点像在你的程序中执行汇编语言的命令。给出的命令集是:
1. ECHO 1:打印数字。例如。 ECHO 1 打印 1
2. 退出:退出程序。
3. SET a 0:给变量赋值0。
4. ADD 2 3 z:这意味着 z = 2+3 将前两个值的总和分配给第三个值。
5. GOTO and LABEL:作为c语言定义的label和goto,label可以在goto之前也可以在goto之后
6. IF 和 END:如果 IF 条件为真,则执行 IF 和 END 命令之间的语句,否则不执行。例如。 IF a 10 statement1 statement2 END 即,如果 a=10。
7. CONTINUE:按c语言定义工作。
变量名只能是字母[az],变量的默认值为0,使用前无需定义或设置。
例子:
Input Output
SET a 0 1
LABEL 100 2
ADD a 1 a 3
ECHO a 4
IF a 5 5
EXIT
END
GOTO 100
#Python code
from sys import stdin
newdict = {}
dict={}
i=0
for line in stdin:
list1=line.split(" ")
list1[-1] = list1[-1].strip()
newdict[i]=list1
i=i+1
key=0
j=0
key_if=[]
label={}
while (key in newdict):
# print (key)
if newdict[key][0]=="SET":
if not newdict[key][2].isalpha():
dict[newdict[key][1]]= int(newdict[key][2])
else:
dict[newdict[key][1]]= int(dict[newdict[key][2]])
key=key+1
elif newdict[key][0]=="ADD":
#print(key)
if not newdict[key][1].isalpha() and not newdict[key][2].isalpha():
dict[newdict[key][3]]=int(newdict[key][1])+int(newdict[key][2])
elif not newdict[key][1].isalpha():
dict[newdict[key][3]]=int(newdict[key][1])+int(dict[newdict[key][2]])
elif not newdict[key][2].isalpha():
dict[newdict[key][3]]=int(dict[newdict[key][1]])+int(newdict[key][2])
elif newdict[key][1] in dict and newdict[key][2] in dict :
dict[newdict[key][3]]=dict[newdict[key][1]]+dict[newdict[key][2]]
key=key+1
elif newdict[key][0]=="ECHO":
if newdict[key][1].isalpha():
print (dict[newdict[key][1]])
else :
print (int(newdict[key][1]))
key=key+1
elif newdict[key][0]=="EXIT":
break;
elif newdict[key][0]=="IF" :
key_if=key_if+[key+1]
if newdict[key][1] in dict and newdict[key][2] in dict :
if(dict[newdict[key][1]]==int(dict[newdict[key][2]])):
key=key+1
elif(dict[newdict[key][1]]==int(newdict[key][2])):
key=key+1;
elif dict[newdict[key][1]]!=int(newdict[key][2]) :
while (newdict[key][0]!="END"):
key=key+1
key=key+1
key_if.pop()
elif newdict[key][2].isalpha() and dict[newdict[key][1]]!=dict[newdict[key][2]]:
while (newdict[key][0]!="END"):
key=key+1
key=key+1
key_if.pop()
elif newdict[key][0]=="CONTINUE" :
key=key_if[-1]
elif newdict[key][0]=="LABEL" :
label[newdict[key][1]]=key
key=key+1
# print (key)
elif newdict[key][0]=="GOTO":
#print(label[newdict[key][1]])
key=label[newdict[key][1]]