- C++
捡石头
- 2025-5-31 20:17:50 @
1、(25分)捡石头
【题目描述】
小强在河边捡了2块漂亮的石头,他想再捡两块石头,让这4块石头的质量正好为30斤,并且新捡的两块石头的质量是介于前两块石头的质量之间的数字,请编程输出第3块和第4块石头的质量。
注:每个石头的重量都是整数,如果找不到合适的石头,则输出0 0。
【输入格式】
输入2个数,数与数之间以空格间隔,表示2块石头的质量。
【输出格式】
输出表示第3、4块石头的质量的所有可能结果,每块石头质量的数字用空格隔开。多组结果时,按第3块石头质量从小到大排序分行输出。
【样例输入】
1 11
【样例输出】
8 10
9 9
#include<iostream>
using namespace std;
int main() {
// 用于存储前两块石头的质量
int a, b;
// 读取前两块石头的质量
cin >> a >> b;
// 如果a大于b,交换a和b的值,确保a小于等于b
if (a > b) {
swap(a, b);
}
// 标记是否找到合适的石头组合,初始为false
bool f = false;
// 遍历可能的第三块石头的质量,范围是在a和b之间
for (int c = a + 1; c <= b - 1; c++) {
// 计算第四块石头的质量,因为四块石头总质量为30斤
int d = 30 - a - b - c;
// 检查d是否也在a和b之间,并且c小于等于d(满足题目要求和避免重复输出)
if (d >= a + 1 && d <= b - 1 && c <= d) {
// 输出找到的第三块和第四块石头的质量
cout << c << " " << d << endl;
// 标记找到合适的石头组合
f = true;
}
}
// 如果没有找到合适的石头组合,输出0 0
if (f == false) {
cout << "0 0" << endl;
}
return 0;
}
2 条评论
-
admin SU @ 2025-5-31 20:18:50
题目解析
一、题目类型与核心考点
本题属于编程中的逻辑算法题,核心考点在于根据给定的条件进行合理的算法设计与编程实现。主要涉及到整数运算、循环遍历以及条件判断等基础编程知识的综合运用。
二、题目条件理解
- 已知条件
- 初始有2块石头,通过输入获取这两块石头的质量,输入格式为两个以空格间隔的整数。
- 目标是让4块石头(包括后续要找的2块)总质量恰好为30斤。
- 新找的两块石头质量需介于前两块石头质量之间,且所有石头质量均为整数。
- 约束条件
- 若不存在满足条件的石头质量组合,输出“0 0”。
- 当存在多组满足条件的结果时,要按照第3块石头质量从小到大的顺序分行输出。
三、解题思路分析
- 数据输入与预处理
- 首先使用合适的输入函数(如在C++中用
cin
,Python中用input
函数配合数据类型转换)获取表示前两块石头质量的两个整数,并确保对输入数据的有效性进行初步检查(本题默认输入合法)。如果两个数的大小关系不确定,可通过条件判断和交换操作保证第一个数小于等于第二个数,方便后续处理。
- 首先使用合适的输入函数(如在C++中用
- 寻找满足条件的石头质量组合
- 利用循环结构来遍历可能的第三块石头质量。循环范围应从前两块石头中较小质量数加1开始,到较大质量数减1结束(因为新石头质量要介于前两者之间) 。
- 在循环内部,根据4块石头总质量为30斤这一条件,通过计算得出第四块石头的质量(即
30 - 前两块石头质量和 - 当前第三块石头质量
)。 - 然后通过条件判断,检查计算出的第四块石头质量是否也介于前两块石头质量之间。如果满足条件,则找到一组符合要求的石头质量组合。
- 结果输出
- 若在遍历过程中未找到任何满足条件的组合,按照要求输出“0 0”。
- 若找到多组组合,需要将这些组合按照第3块石头质量从小到大的顺序进行排序(可以使用编程语言中自带的排序函数,如C++的
std::sort
,Python的sorted
函数等),然后分行输出每一组结果,每组结果中两个质量数用空格隔开。
四、示例代码思路(以Python为例)
# 获取前两块石头的质量 a, b = map(int, input().split()) if a > b: a, b = b, a results = [] for c in range(a + 1, b): d = 30 - a - b - c if a < d < b and c <= d: results.append((c, d)) if not results: print("0 0") else: results.sort() for r in results: print(r[0], r[1])
- 首先通过
input().split()
获取输入并使用map
函数将其转换为整数,赋值给a
和b
,并调整顺序使a <= b
。 - 然后通过
range(a + 1, b)
循环遍历可能的第三块石头质量c
,计算出对应的第四块石头质量d
,判断d
是否满足条件,若满足则将组合(c, d)
添加到results
列表中。 - 最后根据
results
列表是否为空决定输出“0 0”还是按序输出所有找到的组合。
- 已知条件
-
2025-5-31 20:17:58@
#include<iostream> using namespace std; int main() { // 用于存储前两块石头的质量 int a, b; // 读取前两块石头的质量 cin >> a >> b; // 如果a大于b,交换a和b的值,确保a小于等于b if (a > b) { swap(a, b); } // 标记是否找到合适的石头组合,初始为false bool f = false; // 遍历可能的第三块石头的质量,范围是在a和b之间 for (int c = a + 1; c <= b - 1; c++) { // 计算第四块石头的质量,因为四块石头总质量为30斤 int d = 30 - a - b - c; // 检查d是否也在a和b之间,并且c小于等于d(满足题目要求和避免重复输出) if (d >= a + 1 && d <= b - 1 && c <= d) { // 输出找到的第三块和第四块石头的质量 cout << c << " " << d << endl; // 标记找到合适的石头组合 f = true; } } // 如果没有找到合适的石头组合,输出0 0 if (f == false) { cout << "0 0" << endl; } return 0; }
代码总体说明
这段代码的主要功能是根据题目要求,输入前两块石头的质量,然后找出满足条件的第三块和第四块石头的质量并输出。如果找不到满足条件的组合,就输出
0 0
。主要步骤
- 输入与处理:读取前两块石头的质量
a
和b
,并确保a
小于等于b
。 - 寻找组合:通过循环遍历第三块石头质量
c
的可能取值范围,计算出对应的第四块石头质量d
,并检查d
是否也在合适范围内,若满足条件则输出该组合并标记已找到。 - 输出结果:根据是否找到合适组合,输出相应结果。
- 输入与处理:读取前两块石头的质量
- 1