【CSP】CSP-J 2019 江西真题 | 面积 luogu-P5681 (适合GESP一级、二级考生练习)
CSP-J 2019江西省真题- 面积,基本的四则运算与分支结构考点,重点考察对于数据范围带来的整型溢出问题的理解与防范,适合GESP一级、二级及以上考生练习,难度☆,洛谷难度等级入门。
P5681 [CSP-J 2019 江西] 面积
题目要求
题目描述
Alice 有一个边长为 $a$ 的正方形,Bob 有一个长宽分别为 $b,c$ 的矩形,请你告诉他们俩谁的图形面积更大。
输入格式
仅一行三个正整数 $a,b,c$
输出格式
输出仅一行一个字符串,若正方形面积大则输出
Alice,否则输出Bob。
输入输出样例 #1
输入 #1
1
5 4 6
输出 #1
1
Alice
输入输出样例 #2
输入 #2
1
7 5 10
输出 #2
1
Bob
说明/提示
【数据范围】
对于 $30\%$ 的数据,$1 \le a,b,c \le 100$,$b=c$;
对于 $80\%$ 的数据,$1\le a,b,c \le 10^4$;
对于 $100\%$ 的数据,$1\le a,b,c \le 10^9$。
【样例 1 解释】
正方形面积为 $25$,矩形面积为 $24$。
【样例 2 解释】
正方形面积为 $49$,矩形面积为 $50$。
题目分析
本题是一道非常基础的计算与条件判断题,要求我们根据给定的边长,计算正方形与矩形的面积,并进行大小比较。
解题思路分析:
- 计算面积:
- Alice 拥有边长为 $a$ 的正方形,面积公式为 $Area_{Alice} = a \times a$。
- Bob 拥有长宽为 $b, c$ 的矩形,面积公式为 $Area_{Bob} = b \times c$。
- 分别将它们计算出来即可。
- 逻辑判断:
- 题目要求如果正方形面积大,输出
Alice。 - 否则(即正方形面积小于等于矩形面积),输出
Bob。 - 因此可以使用简单的
if (a * a > b * c)分支结构来实现。
- 题目要求如果正方形面积大,输出
避坑指南(关键点):
这道题看似简单,但蕴含着初学者极其容易踩的陷阱——数据溢出(Integer Overflow)。
观察题目的【数据范围】:对于 $100\%$ 的数据,$1\le a,b,c \le 10^9$。 如果我们把变量 $a,b,c$ 声明为普通的 32 位整型且用 int 保存: 在 C++ 中,int 类型最大只能存到接近 $2 \times 10^9$ 的数字(准确地说是 $2^{31}-1$)。 当 $a=10^9$ 时,计算面积 $a \times a = 10^{18}$,这个数字已经远远超过 int 所能容纳的极限。系统将会发生溢出现象,算出一个完全错误的负数或乱码数字,导致我们的前后判定出错!
因此,为了存放高达 $10^{18}$ 级别的数据,我们需要使用 64 位的长整型变量 long long 来定义这些边长变量,long long 最大能安全存放约 $9 \times 10^{18}$ 的数据,足以满足本题不溢出的要求。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
int main() {
// 关键点:用 long long 声明变量,防止相乘时结果溢出 int 的范围
long long a, b, c;
// 输入边长数据
std::cin >> a >> b >> c;
// 计算面积并比较。因为 a, b, c 都是 long long,相乘的结果也会自动使用 64 位无损保存
long long area_alice = a * a;
long long area_bob = b * c;
// 若正方形面积"大"则输出 Alice,否则输出 Bob
if (area_alice > area_bob) {
std::cout << "Alice" << std::endl;
} else {
std::cout << "Bob" << std::endl;
}
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP 学习专题站:GESP WIKI
"luogu-"系列题目可在洛谷题库进行在线评测。
"bcqm-"系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
