题解:洛谷 AT_abc470_a Fizz
【题目来源】
【题目描述】
给定一个正整数 \(N\)。
输出 \(N\) 行。第 \(i\) 行(\(1 \le i \le N\))中,如果 \(i\) 是 \(3\) 的倍数,则输出 Fizz;否则输出 \(i\)。
【输入】
输入一行一个整数 \(N\)。
【输出】
输出 \(N\) 行,每行一个字符串或整数,表示答案。
【输入样例】
4
【输出样例】
1
2
Fizz
4
【核心思想】
-
问题分析:给定正整数 \(N\),对 \(i = 1\) 到 \(N\) 的每个整数,若 \(i\) 是 \(3\) 的倍数则输出
Fizz,否则输出 \(i\) 本身。这是一个模拟问题,直接按题意遍历判断即可,无任何算法技巧。 -
算法选择:
- 直接模拟:循环遍历 \(1\) 到 \(N\),用取模运算判断 \(3\) 的倍数
-
关键步骤:
- 读取 \(N\)
- 循环 \(i\) 从 \(1\) 到 \(N\):
- 若 \(i \bmod 3 = 0\):输出
Fizz - 否则:输出 \(i\)
- 若 \(i \bmod 3 = 0\):输出
-
时间/空间复杂度:
- 时间复杂度:\(O(N)\)
- 空间复杂度:\(O(1)\)
-
模拟的核心思想:
- 按照题目描述直接实现,无需优化或转换
- 适用于规则明确、步骤简单的输出类问题
【算法标签】
入门 #模拟
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int n; // n:需要输出的行数
int main()
{
cin >> n; // 读入正整数n
for (int i=1; i<=n; i++) // 循环枚举1到n的每个整数
{
if (i%3==0) // 判断当前数i是否为3的倍数
cout << "Fizz" << endl; // 是3的倍数,输出"Fizz"
else
cout << i << endl; // 不是3的倍数,输出该数本身
}
return 0;
}
【运行结果】
4
1
2
Fizz
4
浙公网安备 33010602011771号