结果填空题
结果填空题是一类具有确定解的问题,这类型的题目不需要你写出过程,类似于数学考试里面的填空题,你只需要输入结果。
因此解决这种问题的过程甚至可以不使用代码,学习并使用一些特定的 Excel 函数,使用 Windows 自带的计算器,用笔演算(会发草稿纸)求出结果即可。
答案要确保唯一性,最好可以有校验的方法。你需要保证的不止是结果的正确性,因为即使结果正确了,由于是机器阅卷,且一般题目会有明确要求,填入的格式不正确也会判为 0 分。
Sample – 2016,蓝桥,省赛,大学 B 组
有一堆煤球,堆成三角棱锥形。具体:
第一层放 1 个,
第二层 3 个(排列成三角形),
第三层 6 个(排列成三角形),
第四层 10 个(排列成三角形),
……
如果一共有 100 层,共有多少个煤球?
请填写表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
回答区域填写:
171700
求解方法:
#include <iostream>
using namespace std;
int main()
{
int sum = 0;
for(int a = 1; a <= 100; a++){
for(int b = 1; b <= a; b++){
sum = sum + b;
}
}
cout << sum;
return 0;
}
#include <cstdio>
int main()
{
int sum = 0, temp = 0;
for(int a = 1; a <= 100; a++){
temp = temp + i;
sum = sum + temp;
}
printf("%d\n", sum);
return 0;
}
程序填空题
这种题一般会描述一个具有确定解的题目,并且会给你已经按某个可以求解的方法而写出的代码。
这个代码最明显的特征就是删掉了某个部分,而给你的任务就是摸清这个方法是如何解决这个问题的,把空缺的部分用自己的代码补上,可以正常运行,并输出正确的解。
需要注意的是,这类题目在没有明确要求的情况下,建议不要在你的代码中出现注释等不在题目要求范围内的内容。由于同样的代码对不同的人来说写法可能会有所不同,验证程序只会验证你的答案是正确的,你不需要特别在意你的写法。
下面提供一个程序填空题的代码样例:
两个整数做除法,有时会产生无限循环小数。其不断循环重复的那部分被称作 循环节。
例如 $11\div 13=0.8461538461…$ 这个循环小数的循环节即 846153 总共有 $6$ 位。
代码框中的代码可以求出循环节的长度,把从“在下面填入代码”开始的空缺部分代码填充完整,让其可被正常编译,输出正确结果。
样例输入
11 13
样例输出
6
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int f(int n, int m) {
n = n % m;
vector<int> v;
for(;;) {
v.push_back(n);
n *= 10;
n = n % m;
if (n == 0) return 0;
if (find(v.begin(), v.end(), n) != v.end()) {
// 在下面填入代码
}
}
}
int main() {
int n, m;
cin >> n >> m;
cout << f(n, m) << endl;
return 0;
}
回答区域填写:
return v.size() – (find(v.begin(), v.end(), n) – v.begin());
完整代码片段为:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int f(int n, int m) {
n = n % m;
vector<int> v;
for(;;) {
v.push_back(n);
n *= 10;
n = n % m;
if (n == 0) return 0;
if (find(v.begin(), v.end(), n) != v.end()) {
// 在下面填入代码
return v.size() - (find(v.begin(), v.end(), n) - v.begin());
}
}
}
int main() {
int n, m;
cin >> n >> m;
cout << f(n, m) << endl;
return 0;
}
编程大题
题目为若干具有一定难度且分值不等的编程题目。这些题目要求你通过编程,对给定的标准输入求解,并通过标准输出按照题目要求输出解。
题目一般会给示例数据,旨在考察选手对算法的设计和逻辑的组织。理论上,选手不可能通过猜测或其它非编程手段获得问题的解。并且,选手给出的解法需要具备普适性,即适用于包括但不限于题目的示例数据。
- AC (Accepted) 程序通过
- WA (Wrong Answer) 错误的答案
- PE (Presentation Error) 输出格式错误
- RE (Runtime Error) 程序执行错误
- CE (Compile Error) 编译错误
这些题目除了示例数据,也会要求选手的程序在某个时间内和某个内存大小范围内执行完成,旨在考察选手的解法的性能。评分时的用例可能包含非常大的数据量作为压力测试,以测试性能是否达标。
- MLE (Memory Limit Exceeded) 内存超界
- TLE (Time Limit Exceed) 程序超时错误
在评卷时使用的输入和输出数据与题目中可能不同。注意你的解法应该具有普适性。获取输入和进行输出的时候一定不要额外增加不必要的内容,因为电脑不会识别你的“请在此输入:”是一种人性化的体验,它只会判错。一定要仔细阅读示例,不要想当然。另外,程序一定要使用标准输入输出,以便于机器批阅时重定向。
对于 C/C++ 组:
- 程序处理完一个用例的数据后,立即退出(
return 0
),不要循环等待下一个用例的输入。 - 对于编程题目,解答内容需要完全符合 ANSI C++ 标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或操作系统有关的 API 等。
- 代码允许使用 STL 类库。
- 注意:
main
函数结尾必须要有return 0;
。 - 注意:所有依赖的函数必须明确地在源文件中使用
#include <>
进行调用,不能通过工程设置而省略常用头文件。 - 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
- 提交时,注意选择所期望的编译器类型。
对于 Java 组:
- 程序处理完一个用例的数据后,立即退出(
return
),千万不要循环等待下一个用例的输入。 - 不要使用 package 语句。
- 注意:选手代码的主类名必须为:
Main
,否则会被判无效代码。
例如:下面这段代码就是无效代码,因为其中使用了 package 语句,且主类名称不为 Main
:
package temp;
class Circle {
public static void main(String[] args){
// ...
}
}