题解:洛谷 P2433 小学数学 N 合一

【题目来源】

洛谷:P2433 【深基1-2】小学数学 N 合一 - 洛谷

【题目描述】

问题 1

请输出 I love Luogu!

问题 2

这里有 \(10\) 个苹果,小 A 拿走了 \(2\) 个,Uim 拿走了 \(4\) 个,八尾勇拿走剩下的所有的苹果。我们想知道:

  1. 小 A 和 Uim 两个人一共拿走多少苹果?
  2. 八尾勇能拿走多少苹果?

现在需要编写一个程序,输出两个数字作为答案,中间使用空格分开。

问题 3

现在有 \(14\) 个苹果。要均分给 \(4\) 名同学,分不掉的苹果放回冰箱。请问:

  1. 每位同学能分得几个苹果?
  2. 一共分出去多少苹果?
  3. 把几个苹果放回冰箱?

现在需要编写一个程序,输出三个数字作为答案,每个数字一行。

问题 4

现在有 \(500\) 毫升的肥宅快乐水,要均分给 \(3\) 名同学,每位同学可以分到多少毫升?请输出一个数字作为输出。保留 \(6\) 位有效数字,且不使用科学计数法。

问题 5

甲列火车长 \(260\) 米,每秒行 \(12\) 米;乙列火车长 \(220\) 米,每秒行 \(20\) 米,两车相向而行,从两车车头相遇时开始计时,多长时间后两车车尾相离?已知答案是整数。

问题 6

一个长方形长宽分别是 \(6\) cm、\(9\) cm,求它的对角线长度(cm)。直接使用 cout 输出。

问题 7

Uim 银行账户里面有 \(100\) 元。经过了下面的操作:

  1. 往里面存了 \(10\) 元;
  2. 购物花掉了 \(20\) 元;
  3. 把里面的钱全部取出。

请在每次操作后输出账户余额,并使用换行符隔开。

问题 8

当半径为 \(r=5\),请输出圆的周长、面积和球体积。取 \(\pi = 3.141593\)。请直接使用 cout 输出答案,每行一个数字。

问题 9

一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;第二天他也刚好吃了剩余桃子的一半,贪嘴多吃了一个;第三天他又刚好吃了剩下的桃子的一半,并贪嘴多吃了一个。第四天起来一看,发现桃子只剩下一个了。请问小猴买了几个桃子?

问题 10

洛谷的评测任务是单位时间内均匀增加的。\(8\) 台评测机 \(30\) 分钟可以刚好把评测队列中的程序评测完毕,\(10\) 台评测机 \(6\) 分钟可以刚好把评测队列中的程序评测完毕,请问几台评测机可以在 \(10\) 分钟时刚好把评测队列中的程序评测完毕?

问题 11

小 A 跑步速度 \(5\) m/s,八尾勇跑步速度 \(8\) m/s,八尾勇在小 A 后面 \(100\) m,他们同时起跑,请问需要多长时间八尾勇可以追上小 A?输出一个数字表示答案,使用 cout 直接输出。

问题 12

大家都知道有 \(26\) 个英文字母,其中 A 是第一个字母。现在请编程求出:

  1. M 是字母表中的第几个字母?
  2. \(18\) 个字母是什么?

输出一个数字和一个字母,使用换行隔开。

问题 13

小 A 有两块球形橡皮泥,一个半径是 \(4\),一个半径是 \(10\)。他想把这两块橡皮泥揉在一起,然后塑造成一个正方体,请问这个正方体的棱长是多少?如果结果不是整数,则舍去小数点之后的数字。取 \(\pi = 3.141593\)

问题 14

根据咕咕网校的预测,当课程定价为 \(110\) 元时,会有 \(10\) 人报名。如果课程价格每降低 \(1\) 元,就会多 \(1\) 名报名者(反之亦然)。如果希望总共能收到 \(3500\) 元学费的话,那么应该定价多少呢?已知本题有两个答案符合要求,则取较小的那一个。如果这个答案不是整数,则需四舍五入精确到整数。

【输入】

输入一个正整数,表示第几个问题。

【输出】

根据所输入的问题编号,输出对应问题的答案。

【输入样例】

2

【输出样例】

6 4

【核心思想】

  1. 问题分析:给定一个题目编号 \(T \in [1, 14]\),输出对应 \(14\) 个小学数学问题的答案。每个问题都是独立的计算或输出任务,通过 if-else 分支选择执行。

  2. 算法选择

    • 分支选择结构:用 if-else if 链根据输入的 \(T\) 值执行对应的代码块
    • 直接计算输出:每个问题的答案通过简单的算术运算或字符串输出直接得到
  3. 关键步骤

    • 读入编号cin >> T
    • 分支执行
      • \(T=1\):直接输出字符串 "I love Luogu!"
      • \(T=2\):输出 \(2+4=6\)\(10-2-4=4\)
      • \(T=3\):输出 \(14/4=3\)14/4*4=12$、14%4=2$(整数除法、取余)
      • \(T=4\):输出 \(500/3.0\)(浮点除法,保留 6 位有效数字)
      • \(T=5\):输出 \((220+260)/(20+12)=15\)(相遇问题,路程和除以速度和)
      • \(T=6\):输出 \(\sqrt{6^2+9^2}\)(勾股定理)
      • \(T=7\):依次输出 \(100+10=110\)\(110-20=90\)\(0\)
      • \(T=8\):依次输出圆周长 \(2\pi r\)、圆面积 \(\pi r^2\)、球体积 \(\frac{4}{3}\pi r^3\)
      • \(T=9\):逆向推导,第 4 天剩 1 个,倒推得最初 \(22\)
      • \(T=10\):牛吃草问题,设原有队列 \(y\),每分钟新增 \(x\),解得需要 \(9\)
      • \(T=11\):追及问题,\(100/(8-5)\)(路程差除以速度差)
      • \(T=12\):输出 M 的序号 M-'A'+1=13,第 18 个字母 char('A'+17)
      • \(T=13\):两球体积和开立方,取整输出
      • \(T=14\):解方程得定价 \(50\)
    • 输出对应结果
  4. 时间/空间复杂度

    • 时间复杂度:\(O(1)\),每个分支均为常数时间计算
    • 空间复杂度:\(O(1)\),仅需常数个变量
  5. 多分支模拟的核心思想

    • 问题独立性:14 个子问题互不依赖,各自独立计算
    • 分支选择:通过 if-else if 链实现多路选择,结构清晰
    • 数学建模:每个问题对应一个小学数学知识点(四则运算、几何公式、追及相遇、逆向推理等)
    • 类型注意:整数除法 14/4=3 与浮点除法 500/3.0 的区别,以及 4/3.0 避免整数截断
    • 适用于多分支选择、基础数学计算、综合模拟类入门问题

【算法标签】

普及- #模拟

【代码详解】

#include <iostream>    // 包含输入输出流库
#include <cstdio>      // 包含C标准I/O库
#include <math.h>      // 包含数学函数库
using namespace std;   // 使用标准命名空间

/**
 * 主函数 - 程序入口
 * @return 程序执行状态码(0表示成功)
 */
int main()
{
    int T;            // 定义题目编号变量
    cin >> T;         // 输入题目编号

    // 根据题目编号执行对应的输出
    if (T == 1)
    {
        // 题目1:输出字符串
        cout << "I love Luogu!";
    }
    else if (T == 2)
    {
        // 题目2:计算并输出两个数的和与差
        cout << 2 + 4 << " " << 10 - 2 - 4;
    }
    else if (T == 3)
    {
        // 题目3:整数除法运算
        cout << 14/4 << endl;      // 整数除法结果
        cout << 14/4 * 4 << endl;   // 整数除法后再乘法
        cout << 14%4;             // 取余运算
    }
    else if (T == 4)
    {
        // 题目4:浮点数除法
        cout << 500/3.0;          // 保留6位小数
    }
    else if (T == 5)
    {
        // 题目5:火车相遇问题
        cout << (220+260)/(20+12) << endl;  // 计算相遇时间
    }
    else if (T == 6)
    {
        // 题目6:勾股定理计算
        cout << sqrt(6 * 6+9 * 9) << endl;  // 计算斜边长度
    }
    else if (T == 7)
    {
        // 题目7:账户余额计算
        cout << 100+10 << endl;   // 第一次存款后余额
        cout << 100+10-20 << endl; // 取款后余额
        cout << 0 << endl;         // 全部取出后余额
    }
    else if (T == 8)
    {
        // 题目8:圆的相关计算
        cout << 2 * 3.141593 * 5 << endl;          // 圆周长
        cout << 3.141593*pow(5,2) << endl;     // 圆面积
        cout << 4/3.0 * 3.141593*pow(5,3) << endl; // 球体积
    }
    else if (T == 9)
    {
        // 题目9:猴子吃桃问题
        cout << 22;  // 第3天剩余的桃子数
    }
    else if (T == 10)
    {
        // 题目10:牛吃草问题
        cout << 9;   // 需要的周数
    }
    else if (T == 11)
    {
        // 题目11:追及问题
        cout << 100.0/(8-5);  // 计算追上时间
    }
    else if (T == 12)
    {
        // 题目12:字母编号问题
        cout << ('M'-'A' + 1) << endl;  // 计算字母M的序号
        cout << char('A'+18-1) << endl;  // 输出第18个字母
    }
    else if (T == 13)
    {
        // 题目13:球体积合并
        cout << int(pow((4/3.0 * 3.141593*pow(4,3)+4/3.0 * 3.14593*pow(10,3)), 1.0/3));
    }
    else if (T == 14)
    {
        // 题目14:价格计算
        cout << 50;  // 最优价格
    }
    return 0;        // 程序正常结束
}

【运行结果】

2
6 4
posted @ 2026-08-05 15:45  团爸讲算法  阅读(15)  评论(0)    收藏  举报