广西民族大学第一届程序设计竞赛暨
2018 年第九届“蓝桥杯”全国软件和信息技术专
业人才大赛软件类选拔赛题目(C/C++程序设计)
1. 结果填空(5 分)
堆煤球。小明的爷爷很怀旧,冬天来了他还是要自己做煤球。并且,
爷爷把煤球堆放得十分整齐有规律:最上边一层只有 1 个煤球。第
二层 4 个煤球摆成正方形,再下面 9 个煤球也是摆成正方形。
总之,第 n 层就是边长为 n 的正方形。这样的结构既通风又稳固。
小明数了数,一共有 30 层,请你帮助计算一下,一共有多少个
煤球?
2. 结果填空(4 分)
报数游戏。A、B、C、D、E、F、G、H 共 8 人站成一排,按
图 1 所示的方法从 1 开始报数。请问谁报到 1937852?
图 1 报数游戏示意图
3. 代码填空(3 分)
以下程序段的作用是计算个位数为 6,且能被 3 整除的 3 位
数共有多少个?请补充缺少的代码。
for(n=100;n<=999;n++)
if( ________________ && n%3==0)
4. 代码填空(5 分)
以下函数的功能是求字符指针 p 指向的字符串的长度,请补充
缺少的代码。
int strlength(char *p)
{
if (*p=='\0' )
return 0;
return 1 + ____________________;
}
5. 代码填空(3 分)
数列:Sn=1+ 1/2 + 1/3 + … 1/n 被称为调和数列,它“刚
好”是不收敛的。这个数列和增长的速度是惊人缓慢的。下列代码
求出 n 至少为多大,才能保证 Sn > m。请补充缺少的代码。
double m = 20;
double x = 1;
int i = 2;
while(x
if(s[i]=='0')
{
n_0++;
___________________;
{
}
}
else
{
}
n_1++;
___________________;
if(n_1 > max_1) max_1 = n_1;
if(n_0 > max_0) max_0 = n_0;
return (max_1>max_0? max_1 : max_0);
}
7. 编程题(10 分)
搬砖。36 块砖,36 人搬,男搬 4,女搬 3,两个小儿抬一
砖,要求一次全搬完,问男、女、小儿需若干?请编写程序求解。
8. 编程题(15 分)
所谓回文数,即顺序与逆序均为相同的整数,如 292、10301
均为回文数。
有人猜测:任意一个十进制整数 n(n 不为回文数),经过有限
次“顺逆求和”操作可得到一个回文数。这里的“顺逆求和”操作
就是把一个数与其逆序数相加。
例如,对于 n=69 有:
step1:69+96=165
step2:165+561=726
step3:726+627=1353
step4:1353+3531=4884(回文数)
3
请编写程序,展示 n=78 孪育出回文数的转化过程。
9. 编程题(21 分)
现有 n 种不同形状的宝石,每种宝石有足够多颗。欲将这些宝
石排列成 m 行 n 列的一个矩阵,m<=n,使矩阵中每一行和每一列
的宝石都没有相同的形状。
例如,对于 m=3,n=3,则以下是符合题意的排列方案中的其中两
种:
(1) 1 2 3
2 3 1
3 1 2
(2) 1 2 3
3 1 2
2 3 1
试编写程序计算出对于给定的 m 和 n,有多少种不同的宝石排
列方案。
程序输入为两个正整数 m 和 n,输出 为符合题意的宝石排列方
案。例如,输入:
2 2
输出:
2
再例如,输入:
3 3
输出:
12
10. 编程题(26 分)
平面上有 N*M 个格子,每个格子中放着一定数量的苹果。你
从左上角的格子开始,每一步只能向下走或是向右走,每次走到一
个格子上就把格子里的苹果收集起来,这样下去,你最多能收集到
多少个苹果。例如图 2 的苹果分布,最多能收集 76 个苹果。你的
程序应该是通用的,在评卷时使用的输入数据与试卷中给出的示例
数据可能是不同的。
4
图 2 苹果数分布图
程序输入第一行为两个正整数 N 和 M,紧接着第二行开始为
每行的苹果数,程序输出最多能收集的苹果数。
例如,输入:
3 3
1 2 3
4 5 6
7 8 9
则程序应该输出:
29
4
5 8 1
9 1 5
2 7 8
再例如,输入:
3
2
7
6
则程序应该输出:
35
再例如,输入:
6
5
1
7
9
6
8 5 7 1 8
3 2 8 7 9
8 6 6 8 7
9 8 1 6 3