51
、啤酒厂选址(
2021
真题)
海上有一个岛,在环海边上建有一条环岛高速公路,沿着公路有 n(
5 < n < 10000)
个居民点,假设每个居民点有一个编号,从 0 开始,按顺时针依次从小到大(即,0,1,…,
n-1)编号。在岛上啤酒很受青睐。某啤酒企业计划在岛上投资建一个啤酒厂,并根据
啤酒需求每天向居住点送啤酒。已知两个相邻的居民点的距离以及每个居住点每天的啤
酒需求量(假设每个居住点每天不超过 2000 桶)。假定每单位长度的路程送一桶啤酒
需要的费用恒定(为单位费用)。请问,选择哪一个居民点建啤酒厂,才能使每天送啤
酒的费用最小(空车不计费用)。
输入
第一行:为居民点数目 n 后面为 n 行,每行为一个居民点的啤酒需求量以及按顺时
针离下一个居民点的距离(均为整数,空格间隔),从编号为 0 的开始,按单增顺次给
出。 注意:后面第 n 行对应于居民点(
n-1)的啤酒需求量以及到编号为 0 的居民点距
离。
输出
啤酒厂所在的居民点编号以及每天的运输费用,其间以逗号间隔
样例输入
6
500 10
300 30
350 25
400 60
700 28
200 35
样例输出
0,94100
52
、统计误差范围内的数(
2020
真题)
统计一个整数序列中与指定数字 m 误差范围小于等于 X 的数的个数。
输入
输入包含三行: 第一行为 N,表示整数序列的长度(N <= 100); 第二行为 N 个整
数,整数之间以一个空格分开; 第三行包含 2 个整数,为指定的整数 m,误差范围 X。
输出
输出为 N 个数中与指定数字 m 误差范围小于等于 X 的数的个数。
样例输入
5
1 2 3 4 5
3 1
样例输出
3
提示:样例中 2,3,4 都满足条件,故答案为 3
53
、单词倒排(
2020
真题)
编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单
词的顺序倒排并输出,依然以单个空格分隔。
输入
输入为一个字符串(字符串长度至多为 100)。
输出
输出为按要求排序后的字符串。
样例输入
I am a student
样例输出
student a am I。
解题思路:把所有单词一个一个都存到 string 数组里面
//把所有单词一个一个都存到 string 数组里面
内部资料 请勿外传 翻印必究
54
、细菌的繁殖与扩散(
2020
真题)
在边长为 9 的正方形培养皿中,正中心位置有 m 个细菌。假设细菌的寿命仅一天,
但每天可繁殖 10 个后代,而且这 10 个后代,有两个分布在原来的单元格中,其余的均
匀分布在其四周相邻的八个单元格中。求经过 n(1≤n≤4)天后,细菌在培养皿中的分布
情况。
输入
输入为两个整数,第一个整数 m 表示中心位置细菌的个数(
2 ≤ m ≤ 30),第二
个整数 n 表示经过的天数(
1 ≤ n ≤ 4)。
输出
输出九行九列整数矩阵,每行的整数之间用空格分隔。整个矩阵代表 n 天后细菌在
培养皿上的分布情况。
样例输入
2 1
样例输出
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 2 2 2 0 0 0
0 0 0 2 4 2 0 0 0
0 0 0 2 2 2 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
来源:北大医学部 07 计算概论模拟考试
55
、大整数加法(
2020
真题)
求两个不超过 200 位的非负整数的和。
输入
有两行,每行是一个不超过 200 位的非负整数,可能有多余的前导 0。
输出
一行,即相加后的结果。结果里不能有多余的前导 0,即如果结果是 342,那么就不
能输出为 0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
解题思路:位数很多,int、long long 都没法正常完成加减乘除操作,这里采用数
组的存储方式。
内部资料 请勿外传 翻印必究
56
、循环数(
2020
真题)
若一个 n 位的数字串满足下述条件,则称其是循环数(
cyclic):将这个数字串视
为整数(可能带有前导 0),并用任意一个 1 到 n 之间(包含 1 和 n)的整数去乘它
时, 会得到一个将原数字串首尾相接后,再在某处断开而得到的新数字串所对应的整
数。例如,数字 142857 是循环数,因为: 142857 *1 = 142857 142857 *2 = 285714 142857
*3 = 428571 142857 *4 = 571428 142857 *5 = 714285 142857 *6 = 857142。
请写一个程序判断给定的数是否是循环数。
注意:在此题中,输入数字串允许带前导 0,且前导 0 不能被忽略,例如“01”是
两位数字串,而“1”是一位数字串。但将数字串转化为整数做乘法运算或比较运算时,
可以忽略前导 0。
输入
一行,一个长度在 2 到 60 位之间的数字串。
输出
一个整数,若输入的数字串是循环数,输出 1,否则输出 0。
样例输入:142857
样例输出:1
57
、数字放大 高精度乘法(
2021
年
6
月真题)
给定一个整数序列以及放大倍数 x,将序列中每个整数放大 x 倍后输出。
输入
包含三行: 第一行为 N,表示整数序列的长度(N ≤ 100); 第二行为 N 个整数(不超
过整型范围),整数之间以一个空格分开; 第三行包含一个整数(不超过整型范围),
为指定的整数 x。
输出
N 个整数,为原序列放大之后的序列,整数之间以一个空格分开。
样例输入
3
1 5 7
2
样例输出
2 10 14
提示
注意答案的数据范围
解析:
C++不支持大数运算,故而引入高精度算法。 2.高精度乘法将大数以字符串形式
输入,然后拆分转换为一位一位的整数,之后按照小学的竖式运算方法完成编码。
58
、统一文件名(
2021
年
6
月真题
)
小 A 在命名文件的时候经常不注意大小写,格式比较混乱。现要求你写一个程序将
目录下的文件统一规范的格式,即文件名的第一个字符如果是字母要大写,其他字母小
写。如将 Test、test 整理成 Test。
输入:第一行一个数字 n,表示有 n 个文件名要统一,n 不超过 100。 接下来 n 行,每
行一个单词,长度不超过 20,表示文件的名字。文件名由字母、数字和-组成。
输出:n 行,每行一个单词,对应统一后的文件名。
样例输入
4
Test
data
2-TEST
problem-6
样例输出
Test
Data
2-test
Problem-6
59
、求矩阵内部元素之和(
2021
年
6
月真题)
输入一个整数矩阵,计算位于矩阵内部的元素之和。所谓矩阵内部的元素,不在第
一行和最后一行的元素以及第一列和最后一列的元素。
输入
第一行分别为矩阵的行数 m 和列数 n(
m < 100,n < 100),两者之间以一个空格分开。
接下来输入的 m 行数据中,每行包含 n 个整数(每个数大于等于 0,小于 1000),整数之
间以一个空格分开。
输出
输出对应矩阵的内部元素和
样例输入
3 3
3 4 1
3 7 1
2 0 1
样例输出
7
60
、整数奇偶排序(
2021
年
6
月真题)
给定 10 个整数的序列,要求对其重新排序。排序要求:
1.奇数在前,偶数在后;
2.奇数按从大到小排序;
3.偶数按输入顺序逆序排序。
输入:输入一行,包含 10 个整数,彼此以一个空格分开,每个整数的范围是大于等于 0,
小于等于 100。
输出:按照要求排序后输出一行包含排序后的 10 个整数,数与数之间以一个空格分开。
样例输入
4 7 3 13 11 12 0 47 34 98
样例输出
47 13 11 7 3 98 34 0 12 4