【深基1-2】小学数学 N 合一

GitHub跳转原题关系图返回列表

把 14 个固定问题的答案整理成字典,根据输入编号输出对应文本。

OJ: luogu

题目 ID: P2433

难度:入门

标签:python入门分支输出

日期: 2026-07-15 18:02

题意

输入一个题号 T,范围是 1..14。每个题号对应一道固定的小学数学题,程序只需要输出对应答案。

思路

这题可以写很长的 if/elif。但这些答案都是固定文本,用字典保存会更清楚:

  • 键是题号;
  • 值是要输出的答案字符串;
  • 多行答案直接在字符串中写 \n

读入 T 后输出 answers[T] 即可。

brute.py 不适合这题,因为它是固定答案分支题,不存在需要验证的优化算法。

Python 知识

  • 字典 {1: "...", 2: "..."} 可以把题号映射到答案。
  • 字符串中的 \n 表示换行,适合保存多行输出。
  • answers[t] 根据输入编号取出对应答案。
  • print(text, end="") 可以避免额外追加最后一个换行,便于精确匹配固定输出。

对应的本地 Python 笔记:

  • /home/rainboy/mycode/hugo-blog/content/program_language/python/collections_toolkit.md:普通字典保存键到值的映射。
  • /home/rainboy/mycode/hugo-blog/content/program_language/python/input_output_and_strings.md:字符串、多行输出和输入解析。
  • /home/rainboy/mycode/hugo-blog/content/program_language/python/oj_input_output_cheatsheet.md:按题面控制输出格式。

代码

python
answers = {
    1: "I love Luogu!",
    2: "6 4",
    3: "3\n12\n2",
    4: "166.667",
    5: "15",
    6: "10.8167",
    7: "110\n90\n0",
    8: "31.4159\n78.5398\n523.599",
    9: "22",
    10: "9",
    11: "33.3333",
    12: "13\nR",
    13: "16",
    14: "50",
}

t = int(input())
print(answers[t], end="")
cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-07-27 00:00
 * update_at: 2026-07-27 00:00
 */

#include <bits/stdc++.h>
using namespace std;

int main() {
    int T; // 题号 1~14
    cin >> T;
    // 根据题号 switch 分支输出对应答案
    switch (T) {
        case 1: cout << "I love Luogu!"; break;
        case 2: cout << "6 4"; break;
        case 3: cout << "3\n12\n2"; break;
        case 4: cout << "166.667"; break;
        case 5: cout << "15"; break;
        case 6: cout << "10.8167"; break;
        case 7: cout << "110\n90\n0"; break;
        case 8: cout << "31.4159\n78.5398\n523.599"; break;
        case 9: cout << "22"; break;
        case 10: cout << "9"; break;
        case 11: cout << "33.3333"; break;
        case 12: cout << "13\nR"; break;
        case 13: cout << "16"; break;
        case 14: cout << "50"; break;
    }
    cout << endl;
    return 0;
}

Pythonic 写法

match-case:

python
t = int(input())

match t:
    case 1:
        print("I love Luogu!", end="")
    case 2:
        print("6 4", end="")
    case 3:
        print("3\n12\n2", end="")
    case 4:
        print("166.667", end="")
    case 5:
        print("15", end="")
    case 6:
        print("10.8167", end="")
    case 7:
        print("110\n90\n0", end="")
    case 8:
        print("31.4159\n78.5398\n523.599", end="")
    case 9:
        print("22", end="")
    case 10:
        print("9", end="")
    case 11:
        print("33.3333", end="")
    case 12:
        print("13\nR", end="")
    case 13:
        print("16", end="")
    case 14:
        print("50", end="")

match-case 写法

题号是离散分支,用 match-case 按编号分发同样清晰:

python
t = int(input())

match t:
    case 1:
        print("I love Luogu!", end="")
    case 2:
        print("6 4", end="")
    case 3:
        print("3\n12\n2", end="")
    case 4:
        print("166.667", end="")
    case 5:
        print("15", end="")
    case 6:
        print("10.8167", end="")
    case 7:
        print("110\n90\n0", end="")
    case 8:
        print("31.4159\n78.5398\n523.599", end="")
    case 9:
        print("22", end="")
    case 10:
        print("9", end="")
    case 11:
        print("33.3333", end="")
    case 12:
        print("13\nR", end="")
    case 13:
        print("16", end="")
    case 14:
        print("50", end="")

复杂度

字典大小固定,查询一次即可,时间复杂度 O(1)O(1),空间复杂度 O(1)O(1)

总结

当题目是“编号 -> 固定答案”时,字典比很长的分支更容易检查。多行答案可以直接保存在字符串中,输出时不要再手动拼很多 print