Fizz 的题解


记住只在没有思路时使用题解,不要从它复制粘贴代码。请尊重题目和题解的作者。
在解题之前提交题解的代码会导致封禁。

作者: admin

概述

本题要求对于给定的正整数 N,按行输出 1 到 N 的每个数,其中 3 的倍数输出 Fizz。核心解法是遍历每个数,用取模运算判断其是否为 3 的倍数后决定输出内容。

分析
核心观察

一个数能否被 3 整除,等价于它对 3 取模的余数是否为 0,即 i \bmod 3 = 0。因此每个数只需一次取模判断即可确定输出。

思路

依次枚举 i = 1, 2, \ldots, N,对每个 i 判断:

\displaystyle  i \bmod 3 = 0

若成立,则该行输出 Fizz;否则输出 i 本身。整个过程为一次线性扫描,无需任何预处理或额外存储。

具体示例

以样例输入 N = 4 为例:

  • i = 1:1 \bmod 3 = 1 \ne 0,输出 1;
  • i = 2:2 \bmod 3 = 2 \ne 0,输出 2;
  • i = 3:3 \bmod 3 = 0,输出 Fizz;
  • i = 4:4 \bmod 3 = 1 \ne 0,输出 4。

输出结果与样例输出 1 一致。

算法步骤
  1. 读入正整数 N。
  2. 令 i 从 1 循环到 N,若 i \bmod 3 = 0 则输出 Fizz,否则输出 i。
复杂度分析
  • 时间:O(N)
  • 空间:O(1)
实现注意事项
  • 输入仅一个整数,直接读入即可。
  • 判断 3 的倍数时使用取模运算,注意余数为 0 与其他余数两种分支。
  • 每行输出后必须换行,以保证输出格式与样例一致。
  • 约束中 N \le 100,数值很小,普通整型即可满足要求。
源代码
#include <iostream>
using namespace std;

int main() {
    int N;
    cin >> N;
    for (int i = 1; i <= N; i++) {
        if (i % 3 == 0) cout << "Fizz" << '\n';
        else cout << i << '\n';
    }
    return 0;
}
N = int(input())
for i in range(1, N + 1):
    print("Fizz" if i % 3 == 0 else i)

评论

目前没有评论。