【GESP】C++二级练习 luogu-B3658, 口算练习
GESP二级练习,数据类型转换、数学函数练习,难度★✮☆☆☆。
luogu-B3658 [语言月赛202209] 口算练习
题目要求
题目描述
在课堂上,同学们经常需要进行口算练习。
老师出了一道练习题:计算 $\bigg\lfloor \dfrac{x}{y} \bigg\rfloor$ 的值,请你问答这个问题。
其中 $\lfloor a \rfloor$ 代表不超过 $a$ 的最大整数,如 $\lfloor 1.1 \rfloor = 1, \lfloor 4 \rfloor = 4, \lfloor -2.2 \rfloor = -3$。
提示:
在 C++ 中,int 类型变量 x, y,语句
x/y
计算得到的是 $\dfrac{x}{y}$ 向零取整的值。例如:
1 2 int x = -3, y = 2; cout << x / y;上面的代码会输出 -1。
floor
函数,其功能是“向下取整”,比如:floor(-1.5) = -2.0
输入格式
输入共一行两个整数 $x,y$,保证 $y \neq 0$。
输出格式
输出一行一个整数,代表 $\bigg\lfloor \dfrac{x}{y} \bigg\rfloor$。
样例输入 #1
1
2 1
样例输出 #1
1
2
样例输入 #2
1
-3 2
样例输出 #2
1
-2
数据范围
对于 $20\%$ 的数据,$y = 1$;
对于另外 $20\%$ 的数据,保证 $x = ky,k \in \Z$;
对于另外 $20\%$ 的数据,保证 $x \times y >0 $;
对于 $100\%$ 的数据,$-10^3 \le x, y \le 10^3, y \neq 0$。
题目分析
方法一
- 读取两个整数
- 使用floor函数计算两个整数的商
- 输出结果
方法二
- 读取两个整数
- 判断浮点数的正负
- 如果是正数,直接取整
- 如果是负数,判断是否能整除
- 如果能整除,直接取整
- 如果不能整除,取绝对值,加1,再取负
- 输出结果
示例代码
方法一:利用floor函数(不在二级考纲范围内)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cmath>
#include <iostream>
using namespace std;
int main() {
// 读取两个整数
int x, y;
cin >> x >> y;
// 将x除以y,得到一个浮点数
double temp_float = (double) x / y;
// 将浮点数向下取整,输出结果
cout << floor(temp_float) ;
// 返回0,表示程序正常结束
return 0;
}
方法二,利用abs函数计算,符合二级考纲范围
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <cmath>
#include <iostream>
using namespace std;
int main() {
// 读取两个整数
int x, y;
cin >> x >> y;
// 将x除以y,得到一个浮点数
double temp = (double)x / y;
// 初始化结果
int result;
// 判断浮点数的正负
if (temp >= 0) {
// 如果是正数,直接取整
result = (int)temp;
} else {
// 如果是负数,判断是否能整除
if (x % y == 0) {
// 如果能整除,直接取整
result = (int)temp;
} else {
// 如果不能整除,取绝对值,加1,再取负
result = ((int)abs(temp) + 1) * -1;
}
}
// 输出结果
cout << result;
// 返回0,表示程序正常结束
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。