文章

【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-”系列题目可在编程启蒙题库进行在线评测。

本文由作者按照 CC BY 4.0 进行授权