c++组
复赛
测试试题
命题人:北京大学 李畅
考试说明:
1.
试卷
1~4
题每题
100
分, 总共
400
分;
2.
评分标准:运行程序,输入十个测试数据,一个答案正确,得
10
分;
3.
输入输出:按题目的要求输入、输出,从键盘输入,屏幕输出,测试方 式为电脑自动评测,不能有多余的输出信息;
4.
在电脑桌面上以考号为文件名建好了一个文件夹作为工作目录,(如
611
考室座位号
01
,考号为
61101
,文件夹名称为
”61101”
),每做完一题, 应及时用“t+题号”
(
例如“
t1.cpp
”、“t2.cpp”、“t3.cpp”分别表示第 一、二题、三题)
为文件名存入工作目录中。
5.
测评时间限制为
1
秒,对于所有的输入数据,考生的程序必须在运行
1 秒内得出正确结果才能得分。
6.
测评内存限制,对于所有的输入数据,考生的程序运行使用的内存空 间不超过 512M
7.C++
程序基本框架:
#include
using namespace std;
int main()
{
return 0;
}
第一题
填积木(
t1.cpp
)
【
问题描述
】
有一块长为
m,
宽为
n
,高为
h
的魔幻空间,需要你用长宽高都是
a
的正方体
积木填满整个空间(积木可以超出这块魔幻空间的范围
)
,你不能把积木打碎,
请问你至少需要多少块积木才能把魔幻空间填满。
【输入】
输入为 4 个整数
n,m,h
和
a
,分别表示魔幻空间的长宽高和正方体积木的长
宽高。
【输出】
输出为一个正整数表示至少要多少块积木
(
提示:请使用
long long
类型,输出结果保证不超出
long long
类型范围
)
。
输入输出样例
输入
5 1 1 2
输出
3
输入
10 10 1 3
输出
16
输入
4 5 6 2
输出
18
输入
1234567 7654321 3333333 213
输出
3260223524800
样例说明:
样例
1
:长为
5,
宽和高都为
1
的魔幻空间,积木的边长为
2
,用
3
块积木才能填
满;
【数据范围】
有
20%
的数据,保证
1
≤
n,m,h,a
≤
100
。
有
10%
的数据,保证
1
≤
n,m,h
≤10^6,a=1
。
有
20%
的数据,保证
1
≤
n,a
≤10^9,m=h=1
。
有
20%
的数据,保证
1
≤
n,m,a
≤10^9,h=1
。
对于
100%
的数据,保证
1
≤
n,m,h,a
≤
10^
9
。
第二题
闰年(
t2.cpp
)
【
问题描述
】
能被 4 整除但不能被 100 整除的年份是闰年;能被 400 整除的年份也是闰年。
比如 2024 年是闰年,2022 年不是闰年;2000 年是闰年,2100 年不是闰年;
给出正整数 a 和 b,求第 a 年到第 b 年之间有多少个闰年(包括 a 和 b)。
【输入】
输为两个用空格隔开的整数 a 和 b(a<=b)。
【输出】
输出为一个数,表示有多少个闰年。
(
提示:请使用
long long
类型
)
输入输出样例
输入
2000 2024
输出
7
输入
1 1000
输出
242
输入
1 1000000
输出
242500
输入
1 100000000000
输出
24250000000
输入说明:1 后面有 11 个 0)
【数据范围】
对于
30%
的数据,保证
1<=a,b<=100;
对于
50%
的数据,保证
1<=a,b<=10^
6
;
对于
100%
的数据,保证
1<=a,b<=10^
12
。
第三题 发牌(
t3.cpp)
【
问题描述
】
小雨同学在玩发牌的游戏,她有 N 张牌,第一张牌的数字是 1,第二张的 数字是2,第三张的数字是3,...,第十三张的数字是13,第十四张的数字是1,..., 以此类推,第 n 张牌的数字是(n-1)%13+1;发牌的方式是“藏一发一”,把第 1 张放到最后,发第 2 张,把第 3 张放到最后,发第 4 张,把第 5 张放到最后,发 第 6 张,...,一直这样发下去,直到剩下一张牌为止,问剩下的最后一张牌的数 字是多少?
【输入】
输入为一个数 N,表示牌的数量。
【输出】
输出最后一张牌的数字。
输入输出样例
输入
13
输出
11
输入
3
输出
3
输入
1000
输出
2
输入
1000000
输出
7
输入
10000000000
输出
10
样例说明:(样例 5 输入:1 后面有 10 个 0)
样例
1
解释:发牌的顺序为:
2,4,6,8,10,12,1,5,9,13,7,3,11
。
样例
2
解释:发牌的过程为:把第
1
放到最后,发
2
,把
3
放到最后,发
1
,还
剩一张
3
;
【数据范围】
对于
20%
的数据,保证
1<=N <=13
。
对于
40%
的数据,保证
1<=N <=1000
。
对于
80%
的数据,保证
1<=N <=10^
6
。
对于
100%
的数据,保证
1<=N <=10^
15
。
第四题
不进位算术运算(
t4.cpp
)
【
问题描述
】
楠楠在学算术运算,已经学了加减乘三种运算,但他在加法和乘法中不会进
位,在减法中不会借位,所以他在做算术题的时候直接忽略进位和借位,算出的
结果可能与正确的答案不一样,以下是楠楠的计算结果:
25+34=59;5+9=4;1537+375=1802;
7
×
9=3;25
×
34=630;
26-17=19;1537-375=1262;25-34=91;25-37=98;
比如计算 25
×
34 的方法:
比如在计算 25 减 37 时,先把被减数的个位 5 减去减数的个位数 7,发现不
能减,就把 5 加 10 再减 7 得到个位是 8;再把被减数的十位数 2 减去减数的十
位数 3,发现不能减,就把 2 加 10 再减 3 得到十位是 9,最后楠楠算出的结果是
98;
众所周知,计算机里使用的是二进制,现在你学了二进制,知道二进制的原
理和计算方法了:二进制是逢二进一,只使用 0 和 1 两个数字;
二进制计算方法:
0+0=0;1+0=1;1+1=10;
0
×
0=0;1
×
0=0;1
×
1=1;
0-0=0;1-0=1;1-1=0;
你对楠楠的计算方法很感兴趣,想知道在二进制中按楠楠的不进位和不借位
的方法计算的结果。
楠楠的二进制计算方法:
0+0=0;1+0=1;1+1=0;
0
×
0=0;1
×
0=0;1
×
1=1;
0-0=0;1-0=1;1-1=0;0-1=1
现给出两个运算数和一个运算符,请你按楠楠算法计算在十进制和二进制下
计算的结果。
【输入】
输入四个用空格隔开的整数 a,b,f,m,其中 a,b 为两个运算数,f 为运算符
(
f 为 1 表示加法运算,f 为 2 表示减法运算,f 为 3 表示乘法运算),m 为 2
或 10,如果 m 等于 2 表示在二进制下的运算,如果 m 等于 10 表示在十进制下的
运算。
【输出】
输出为一个数,表示按楠楠算法计算出的结果(保证输出结果为整数范围)。
输入输出样例
样例 1
样例 2
样例 3
样例 4
样例 4
样例 4
输入
2 3 1 10
输出
5
输入
25 34 3 10
输出
630
输入
25 37 2 10
输出
98
输入
111 10 1 2
输出
101
输入
101 10 2 2
输出
111
输入
111 111 3 2
输出
10101
【数据范围】
对于
40%
的数据,保证
f=1
。
对于
30%
的数据,保证
f=2
。
对于
30%
的数据,保证
f=3
。
对于
50%
的数据,保证
m=10
。
对于
100%
的数据,保证
0<=a,b<=10
9
。
以下是 20 以内 10 进制与二进制对应表