题解:洛谷 P5712 Apples
【题目来源】
【题目描述】
八尾勇喜欢吃苹果。她今天吃掉了 \(x\) 个苹果。英语课上学到了 apple 这个词语,想用它来造句。如果她吃了 \(1\) 个苹果,就输出 Today, I ate 1 apple.;如果她没有吃,那么就把 \(1\) 换成 \(0\);如果她吃了不止一个苹果,别忘了 apple 这个单词后面要加上代表复数的 s。你能帮她完成这个句子吗?
【输入】
输入一行一个自然数 \(x\),表示吃掉的苹果数。
【输出】
根据题目要求输出。
【输入样例】
1
【输出样例】
Today, I ate 1 apple.
【核心思想】
-
问题分析:给定吃掉的苹果数 \(x\),输出对应英文句子。语法规则:\(x \le 1\) 时用单数
apple,\(x > 1\) 时用复数apples。 -
算法选择:
- 分支选择:根据 \(x\) 的值选择单数或复数形式输出
-
关键步骤:
- 读入数据:
cin >> x - 分支输出:
- 若
x <= 1:输出"Today, I ate %d apple." - 否则:输出
"Today, I ate %d apples."
- 若
printf中的%d替换为 \(x\) 的值
- 读入数据:
-
时间/空间复杂度:
- 时间复杂度:\(O(1)\),单次判断和输出
- 空间复杂度:\(O(1)\),仅需一个整型变量
-
语法规则模拟的核心思想:
- 单复数边界:英语中 \(0\) 和 \(1\) 用单数,\(\ge 2\) 用复数,因此判断边界为
x <= 1 - 格式化输出:
printf的%d占位符动态插入数字,避免字符串拼接 - 固定句式:句子结构固定,仅数字和单复数形式变化
- 适用于语法规则模拟、条件输出、字符串格式化类入门问题
- 单复数边界:英语中 \(0\) 和 \(1\) 用单数,\(\ge 2\) 用复数,因此判断边界为
【算法标签】
入门 #模拟
【代码详解】
#include <bits/stdc++.h> // 包含标准库头文件(万能头文件)
using namespace std; // 使用标准命名空间
/**
* 主函数 - 程序入口
* @return 程序执行状态码(0表示成功)
*/
int main()
{
int x; // 定义变量:吃掉的苹果数量
cin >> x; // 输入苹果数量
// 根据苹果数量选择单复数输出
if (x <= 1)
{
// 数量≤1时使用单数形式
printf("Today, I ate %d apple.", x);
}
else
{
// 数量>1时使用复数形式
printf("Today, I ate %d apples.", x);
}
return 0; // 程序正常结束
}
【运行结果】
1
Today, I ate 1 apple.
浙公网安备 33010602011771号