蓝桥杯入门

施工中…
由于前序内容已经可以阅读,
现在将内容发布。

全文施工完毕预计于 2020 年 10 月 20 日。

结果填空题

结果填空题是一类具有确定解的问题,这类型的题目不需要你写出过程,类似于数学考试里面的填空题,你只需要输入结果。

因此解决这种问题的过程甚至可以不使用代码,学习并使用一些特定的 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){
		// ...
	}
}
页面: 1 2

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注