前言
签到题是竞赛中相对简单、容易得分的题目,通常出现在比赛的前几道题。签到题具有题意清晰、解题思路简单、计算量小等特点。签到题在竞赛中占据重要的地位,它们是参赛者获取基础分数的关键。签到题大致可以分为数学类计算题、组合与排列类计算题、逻辑推理类计算题。
填空签到题实战案例1
试题A:求和(5分)
问题描述:求1(含)至20230408(含)中每个数的和。
答案提交:这是一道结果填空题,你只需要计算出结果后提交即可。本题的结果为一个整数,在提交答案时只填这个整数,填写多余的内容将无法得分。
问题分析:很明显,这是一道数学计算类的题,可以手算也可以编程解决。不难看出,这道题跟数学中的等差数列有点像,或许可以利用等差数列来解决,其公式就是n*(n+1)/2。20230408是一个很大的数,会不会溢出呢。在C++中,int的范围是32位,也就是2^31-1,也就是2147483647。所以,数据范围明显会溢出(4e14),必须使用更大的数据类型(long long)。
问题代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;using ll = long long;int main() {ll n = 20230408;ll result = n * (n + 1) / 2;cout << result << endl;return 0;
}
//输出结果:204634714038436
填空签到题实战案例2
试题B:空间(5分)
问题描述:小蓝准备用256MB的内存空间开一个数组,数组的每个元素都是32位二进制整数,如果不考虑程序占用的空间和维护内存需要的帮助空间,请问256MB的空间可以存多少个32位二进制整数?
答案提交:这是一道结果填空题,你只需要计算出结果后提交即可。本题的结果为一个整数,在提交答案时只填这个整数,填写多余的内容将无法得分。
问题分析:如果你想要把这道题做对,就必须要知道这道题所所涉及的字节转换。记得1MB等于2^20字节,或者更常见的说法是1MB=1024KB,1KB=1024B,所以1MB=1024×1024=1,048,576字节。每个数组元素是32位二进制整数。这里要注意,位(bit)和字节(Byte)的关系。一个字节等于8位,所以32位等于4个字节(因为32÷8=4)。所以每个元素占4个字节。现在的问题是,总共有多少字节的空间,每个元素占4字节,所以总元素个数就是总字节数除以每个元素占的字节数。也就是256MB的字节数除以4。这样就能得到答案了。最后,元素个数=总字节数/单个元素字节数。
问题代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;using ll = long long;int main() {ll total_bits = 256LL * 1024 * 1024;ll nums_size = 4;ll nums = total_bits / nums_size;cout << nums << endl;return 0;
}
//输出结果:67108864
填空签到题实战案例3
试题C:ASC(5分)
问题描述:已知大写字母的ASCLL码为65,请问大写字母L的ASLL码是多少?
答案提交:这是一道结果填空题,你只需要计算出结果后提交即可。本题的结果为一个整数,在提交答案时只填这个整数,填写多余的内容将无法得分。
问题解析:首先给大家拓展一下ASCLL码,如图所示:
首先,ASCII码中,大写字母A到Z是连续排列的。A是65,那么B应该是66,C是67,依此类推,直到Z是90。所以每个字母对应的ASCII码可以通过它在字母表中的位置来计算。
题目问的是L的ASCII码。那么我需要确定L是字母表中的第几个字母。A是第1个,B是第2个,C第3个,D第4个,E第5个,F第6个,G第7个,H第8个,I第9个,J第10个,K第11个,L就是第12个字母。所以,L的ASCII码应该是65加上11,因为A是65,后面每个字母加1。这样计算的话,65 + 11 = 76。所以答案应该是76。
问题代码:
int main() {cout << (int)'L' << endl;return 0;
}
//输出结果:76