【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$。
题目分析
为了向下取整
- (1)我们可以直接使用floor函数即可;
- (2)如果手动计算:我们需要计算 $x$ 除以 $y$ 的结果,并将结果转换为整数。具体来说,如果结果为正数,我们直接取整数部分;如果结果为负数,我们需要判断 $x$ 是否能被 $y$ 整除,如果能,则直接取整数部分;如果不能,则需要向下取整,例如 $-1.5$ 向下取整为 $-2$。(可以先变为正数,然后强转为int然后+1,再变为负数)
示例代码
代码一:使用floor函数
1
2
3
4
5
6
7
8
9
10
11
12
#include <cmath>
#include <iostream>
using namespace std;
int main() {
int x, y; // 定义两个整数变量x和y
cin >> x >> y; // 从输入流中读取x和y的值
double ans = (double)x / (double)y; // 计算x除以y的结果,并将结果转换为浮点数
cout << floor(ans); // 输出结果的整数部分
return 0; // 返回0,表示程序执行成功
}
代码二:手动实现向零取整
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cmath>
#include <iostream>
using namespace std;
int main() {
int x, y; // 定义两个整数变量x和y
cin >> x >> y; // 从输入流中读取x和y的值
double temp = (double)x / y; // 计算x除以y的结果,并将结果转换为浮点数
int result; // 定义整数变量result
if (temp >= 0) {
result = (int)temp; // 如果结果非负,则直接取整数部分
} else {
if (x % y == 0) {
result = (int)temp; // 如果x能被y整除,则直接取整数部分
} else {
result = ((int)abs(temp) + 1) * -1; // 如果x不能被y整除,则向零取整
}
}
cout << result; // 输出结果
return 0; // 返回0,表示程序执行成功
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。