趣乐博思剑指信奥系列
❝趣乐博思剑指信奥系列,专门针对全国青少年信息学奥林匹克联赛 NOIP 而开展的专业教育方案。开设的课程有 C 语言基础,C++ 语言基础,算法设计入门与进阶,经典试题分析与详解等系列课程。面向10 - 16 岁少儿的编程教育,培养扎实的 C++ 语言基础,灵活运用算法的能力,分析解决问题的能力。
❞
剑指信奥 | C 语言之信奥试题详解(二)
上次课的思考题
这个六位数要连续除三个数,结果一定是整数吗?如果不是的话,输出
%d
是否有问题?
还记得公式吗:
六位数 = 三位数 * 1000 + 三位数
如果提取一下公因式就变成了:
六位数 = 三位数 * (1000 + 1)
进而:
六位数 = 三位数 * 1001
而:
7 * 11 * 13 = 1001
所以最后的结果就是三位数本身!
No. 1 填充矩形 ?
题目
题目描述
已知矩形的大小为 n × m,现用 a × a 的正方形填充该矩形。
输入三个正整数 n, m, a(n, m, a ≤ 10^9),计算至多能填入多少正方形?(正方形可以正好碰到矩形边界,但不能超出矩形外)
输入
一行三个用一个空格隔开的正整数 n, m, a。
输出
输出能填入正方形的数量。
样例输入
3 4 1
样例输出
12
数据范围限制
1 <= n, m, a ≤ 10^9
题解
题目分析
这道题我们需要画张图分析一下:
示意图
从图中不难看出,我们的摆放正方形是有策略的,就是从矩形的一角开始向其他两个方向延伸,直到放不下为止,这时正方形的个数就是最多的。
那问题来了,怎么把这个转换成代码呢?
在分析一下,能放下和放不下的判断依据是什么呢?
就是当前剩余的长度是否能够整除 a。
所以,最多的方块数就是:
(n 中 a 的个数) * (m 中 a 的个数)
到此为止,我们的解题思路就有了。
注意事项
- 注意 n, m, a 的数据范围是 10 的 9 次方,需要使用 long 型存储变量。
- 整形除法的规则是截去余数,正好适用于这道题。
解题过程
- 输入 n, m, a
- 求出 n / a 和 m / a
- 以上结果相乘并输出
参考代码
#include
int main() {
long n, m, a;
scanf("%ld %ld %ld", &n, &m, &a);
long z = (n / a) * (m / a);
printf("%ld", z);
return 0;
}
No. 2 存款收益 ?
题目
题目描述
按年利率 R% 存入本钱 X,存入 P 年后的本利合计为 X * ((100 + R) / 100) ^ P,求 Y 的值。
输入
输入一行三个空格隔开的实数 R, X,P
输出
输出收益 Y,答案保留两位小数。
样例输入
1 100 5
样例输出
105.10
数据范围限制
1 <= X <= 10000 1 <= P, R <= 100
题解
题目分析
这道题考察的是基本运算,按照公式求出结果即可。
注意事项
- 需要引入
math.h
,乘方函数是pow()
- 注意录入 r, x, p 的顺序
解题过程
- 输入 r, x, p
- 计算并输出
参考代码
#include
#include
int main() {
double r, x, p, y;
scanf("%lf %lf %lf", &r, &x, &p);
y = x * pow((100 + r) / 100, p);
printf("%.2lf", y);
return 0;
}
No. 3 捡石头 ?
题目
题目描述
憨厚的老农夫昨天捡到了 3 块小石头,他想再去捡一个小石头,让这 4 个石头正好一共重 20 斤,请问他应该去捡一个多少斤的石头?
输入
三个整数 a, b, c,是这三个石头的重量 (斤)
输出
一个数,表示农夫应该去捡一个多少斤的石头。
样例输入
3 5 7
样例输出
5
题解
题目分析
这道题是一个基本的运算题。要想知道还要捡多少斤的石头,应该先知道已经捡了多少斤,然后用 20 做减法就可以了。
解题过程
- 注意题目要求的数据类型是整形
解题过程
- 输入 a, b, c
- 运算并输出
参考代码
#include
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
printf("%d", 20 - (a + b + c));
return 0;
}
「 剑指信奥系列 」
从零开始,进阶信息学奥林匹克竞赛
清华计算机系哥哥专业讲解
趣乐博思教育
遇见你更优秀的孩子
r
如果您喜欢 趣乐博思教育,请关注我们的公众号,发现您更优秀的孩子!
如果您从这篇文章有所收获,请点亮下方 在看,或转发到朋友圈,谢谢!