本仓库为Codeup墓地中编程题详细解题代码以及必要的解析
(一些必要提示在代码注释中,带M标志的有详细解析)
本人水平有限,所以只求AC,在时间和空间上未能考虑优化。如有错误,恳请原谅。
也欢迎各位如有更好的代码和解题方案,在本仓库提出修改请求。
更新情况:已更新至题号1115。
网上的在线OJ系统采用的黑盒测试分为:
- 单点(多次运行,一次运行测试一组样例)
- 多点(一次运行,运行后循环测试多组样例)
本仓库所用网站codeup.cn采用的是多点黑盒测试。
具体分为以下类型
- while……EOF
题目未给出输入结束条件。
while ( scanf("&d", &n) != EOF ) {
// To do something
}注:函数scanf()的返回值是按照给定格式字符串正确录入缓存区的参数个数(int值)。当在录入时遇到匹配不正确的参数时,录入就直接终止,返回已正确录入的参数个数。当发现录入值是EOF时,返回也是EOF(一般其值为-1)。EOF在控制台可用ctrl+z表示。
EOF只能出现在第一个录入参数,否则程序中断。
- 对于字符串的输入
while ( scanf("%s", str) != EOF ) {
// To do something
}
while ( gets(str) != NULL ) {
// To do something
}注:scanf()和gets()都可以用来输入字符串,但在使用上有所差别。
gets()以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区。gets()读到EOF或读入错误返回NULL。
scanf()以空格或回车符结束读取,结尾自动加上'\0',空格或回车符会遗留在缓冲区。
- while……break
题目给出了输入结束的条件,如n=0时结束输入。
- while ( t-- )
题目给出了测试数据的组数
- 用scanf处理字符或字符串时,忽视遗留在缓存区的空白符。
如某题,多组输入,每组输入先输入一个字符,再输入一个整数。这样对于不是第一组输入,都要先用getchar()吸收上组输入留在缓存区的换行符。否则,输入就会混乱。
- C语言中,对于浮点数输入时的占位符是%lf,输出是%f。
- 求并集的题目,结果数组大小为求并的两数组大小之和。
- 大数组要在全局范围内定义。