问题阐述:
通过参加近3次笔试(阿里、字节跳动、网易)发现
机考的编译界面不同于leetcode(已经给出部分代码,不需要读取,直接用即可)
机考类似于华为机考,需要从零开始,包括读取输入
Bug:读取错误
在读取的时候,本地可以运行的代码却总是会报这个错误
EOFerror:EOF when reading a line
解决这个问题的最好方式是采用try和except语法
list1 = []
while True:
try:
number = input()
if(number == ""):
break
list1.append(number)
except EOFError:
break
for i in list1:
print(int(i,16))
读取多行数据可以采用上面所示代码的结构,while大循环里套上try
原 因 溯 源
产生这个bug的原因是因为机考测试不是人为手动输入测试案例,而是使用管道将输入传进测试的python脚本里,如下
由于EOF无法通过管道被传输,所以会报错,针对于此。牛客特别提供了一套输入输出的测试练习题,链接如下
牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJac.nowcoder.com
解析同时附上
牛客OJ在线编程常见输入输出练习(python版)_qq_41023125的博客-CSDN博客_牛客在线oj输入输出联系blog.csdn.net
下面为笔试机考C的时候遇到的输入问题,可采用以下方式正确读取
单行读取数字
int main(void)
{
int a, b;
scanf("%d %d",&a,&b);
return 0;
}
单行读取字符串
#include
#include
int main()
{
char str[1000];
gets(str);
return 0;
}
多行读取数字
可以参考此题排名第一的题解写法
矩阵乘法_牛客网www.nowcoder.com
#include
int main()
{
int x,y,z;
int a[50][50]={0};
int b[50][50]={0};
while(scanf("%d%d%d",&x,&y,&z)!=EOF)
{
for(int i=0;i
{
for(int j=0;j
scanf("%d",&a[j][i]);
}
for(int i=0;i
{
for(int j=0;j
scanf("%d",&b[j][i]);
}
for(int i=0;i
{
for(int j=0;j
{
int sum=0;
for(int k=0;k
sum+=a[k][i]*b[j][k];
printf("%d ",sum);
}
printf("n");
}
}
return 0;
}