返回 课程
信奥AC之路-1级
0% 完成
0/0 步骤
-
第1课 开发环境与基础输出5 主题|小节
-
第2课 算术运算符7 主题|小节
-
第3课 printf与运算输出7 主题|小节
-
第4课 数的进制与拆位6 主题|小节
-
第5课 变量与基础运算17 主题|小节
-
第6课 常量与取整运算8 主题|小节
-
第7课 关系运算8 主题|小节
-
第8课 逻辑运算9 主题|小节
-
第9课 输入与计算进阶10 主题|小节
-
第10课 if语句及双分支语句8 主题|小节
-
第11课 if语句及双分支进阶11 主题|小节
-
第12课 三目运算9 主题|小节
-
第13课 多分支、多if和switch语句11 主题|小节
-
第14课 循环(基本输出)7 主题|小节
-
第15课 循环(While+If)8 主题|小节
-
第16课 循环(计数、求和、求乘积)7 主题|小节
-
第17课 循环进阶(While+)
-
第18课 do-while及while其他用法
-
第19课 For循环基础
-
第20课 For循环进阶
课 进展
0% 完成
11.1.1 矩形扩建为正方形
“在几何问题中,条件判断经常被用来处理不同的形状和尺寸之间的转换,”我解释道,”让我们从一个关于矩形鱼塘扩建的问题开始。”
实验一:扩建鱼塘问题
题目描述:有一个尺寸为m×n的矩形鱼塘,请问如果要把该鱼塘扩建为正方形,那么它的面积至少增加了多少平方米?
样例输入:
3 5
样例输出:
16
思路分析: 要将矩形扩建为正方形,需要确定正方形的边长。为了使扩建面积最小,应选择矩形的较长边作为正方形的边长。在样例中,较长边是5,所以正方形面积为5×5=25,原矩形面积为3×5=15,增加的面积为25-15=10平方米。
代码实现:
// 方法一:使用变量k存储结果
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int k;
k = m * m - m * n; // 假设m较大,计算扩建面积
if(m < n) { // 如果假设错误(n更大)
k = n * n - m * n; // 重新计算扩建面积
}
cout << k;
return 0;
}
// 方法二:使用变量d存储较大值
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int d = m; // 假设m较大
if(n > m) { // 如果n更大
d = n; // 更新d为较大值
}
cout << d * d - m * n; // 计算扩建面积
return 0;
}
// 方法三:使用swap函数
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
if(m < n) { // 如果m小于n
swap(m, n); // 交换m和n,确保m为较大值
}
cout << m * m - m * n; // 计算扩建面积
return 0;
}
// 方法四:提前返回
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
if(m > n) { // 如果m大于n
cout << m * m - m * n; // 输出结果
return 0; // 结束程序
}
cout << n * n - m * n; // 如果m不大于n,输出另一结果
return 0;
}
// 方法五:使用两个独立的if语句
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
if(m > n) { // 如果m大于n
cout << m * m - m * n; // 输出结果1
}
if(m <= n) { // 如果m小于等于n
cout << n * n - m * n; // 输出结果2
}
return 0;
}
// 方法六:使用if-else语句
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
if(m < n) { // 如果m小于n
cout << n * n - m * n; // 输出结果1
} else { // 否则(m大于等于n)
cout << m * m - m * n; // 输出结果2
}
return 0;
}
// 方法七:使用max函数
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int d = max(m, n); // 使用max函数找出较大值
cout << d * d - m * n; // 计算扩建面积
return 0;
}
思考:
- 方法一先假设m较大,如果假设错误则重新计算
- 方法二使用变量d存储较大值,避免重复计算
- 方法三使用swap函数确保m为较大值,简化后续计算
- 方法四使用提前返回,避免额外变量
- 方法五使用两个独立的if语句处理两种情况
- 方法六使用if-else结构,确保只有一个分支被执行
- 方法七使用max函数直接获取较大值,代码最简洁
11.1.2 判断三角形
“在几何问题中,判断三角形是否存在是一个经典问题,”我继续说道,”它需要我们应用三角形的基本性质进行条件判断。”
实验二:是否构成三角形
题目描述:输入三个整数,表示3条线段的长度,判断这三条线段能否构成三角形。能构成就输出Yes,否则输出No。三角形的判断标准是:任意两边之和要大于第三边。
样例输入:
3 4 5
样例输出:
Yes
样例输入:
1 2 3
样例输出:
No
思路分析: 根据三角形的性质,任意两边之和必须大于第三边。因此,需要判断三组边的组合是否都满足这个条件。在第一个样例中,3+4>5、3+5>4和4+5>3都成立,所以可以构成三角形。在第二个样例中,1+2=3不大于3,所以不能构成三角形。
代码实现:
// 方法一:使用字符串变量存储结果
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
string st = "No"; // 默认结果为No
if(a + b > c && a + c > b && b + c > a) {
st = "Yes"; // 如果满足条件,更新结果为Yes
}
cout << st;
return 0;
}
// 方法二:逻辑取反的应用
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
string st = "Yes"; // 默认结果为Yes
if(!(a + b > c && a + c > b && b + c > a)) {
st = "No"; // 如果不满足条件,更新结果为No
}
cout << st;
return 0;
}
// 方法三:德摩根定律应用
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
string st = "No"; // 默认结果为No
if(!(a + b <= c || a + c <= b || b + c <= a)) {
st = "Yes"; // 如果满足条件,更新结果为Yes
}
cout << st;
return 0;
}
// 方法四:直接使用或运算
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
string st = "Yes"; // 默认结果为Yes
if(a + b <= c || a + c <= b || b + c <= a) {
st = "No"; // 如果不满足条件,更新结果为No
}
cout << st;
return 0;
}
// 方法五:使用两个独立的if语句
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
if(a + b > c && a + c > b && b + c > a) {
cout << "Yes"; // 如果满足条件,输出Yes
}
if(a + b <= c || a + c <= b || b + c <= a) {
cout << "No"; // 如果不满足条件,输出No
}
return 0;
}
// 方法六:使用if-else语句和与运算
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
if(a + b > c && a + c > b && b + c > a) { // !(a+b<=c||a+c<=b||b+c<=a)
cout << "Yes"; // 满足条件,输出Yes
} else { // 否则(不满足条件)
cout << "No"; // 输出No
}
return 0;
}
// 方法七:使用if-else语句和或运算
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
if(a + b <= c || a + c <= b || b + c <= a) { //!(a+b>c&&a+c>b&&b+c>a)
cout << "No"; // 不满足条件,输出No
} else { // 否则(满足条件)
cout << "Yes"; // 输出Yes
}
return 0;
}
思考:
- 方法一和方法二分别从正面和反面判断三角形条件
- 方法三和方法四应用了德摩根定律,将”与”条件转换为”或”条件
- 方法五使用两个独立的if语句分别处理两种情况
- 方法六使用if-else结构和”与”运算判断三角形条件
- 方法七使用if-else结构和”或”运算判断三角形不成立条件
- 所有方法都基于三角形的基本性质:任意两边之和大于第三边