本文为 C/C++ 学习总结,讲解 OJ 平台的黑盒测试
单点测试
系统判断每组数据输出结果是否正确,按照正常逻辑执行一遍程序即可。
多点测试
要求程序一次运行所有数据。
输入方式
while…EOF 型
如果题目没给定输入的结束条件,默认读取到文件末尾。scanf 函数的返回值为其成功读入的参数的个数。当读取文件时达到文件末尾无法读取时,产生读入失败,scanf 返回 -1 而不是 0,C 语言中使用 EOF 来表示 -1。
当题目没说多少数据要读入时,可利用 scanf 返回值是否为 EOF 判断读入是否结束:
while(scanf("%d", &n) != EOF){}
读入字符串时使用:
while(scanf("%s", str) != EOF){}
while(gets(str) != NULL){} // 注意这里是NULL不是EOF
while…break 型
题目要求输入符合某条件时停止。例如输入 a、b 都为 0 时结束输入:
while(scanf("%d%d", &a, &b), a || b){}
把推出条件的判断放到 while 语句中,与 scanf 用逗号隔开。
while(T–) 型
题目给出测试数据的组数,给出相应组数的输入数据。
while(T--){}
注意:多点测试中,每次循环前要重置变量和数组,重置数组一般使用 memset 或 fill 函数。通常直接在循环里面重新定义变量,或使用 initial 函数。
输出方式
输出一行 N 个整数,每两个间用空格隔开,结尾不能加空格。
for(int i = 0; i < N; i++){
printf("%d", a[i]);
if(i < N - 1) printf(" ");
else printf("\n");
}