就这?黄标题
✅ 一、题目深入解析
📌 题目大意:
起始是 星期一(Monday)
经过 M 天后,是星期几?
输出对应的英文单词(注意大小写完全正确)
📥 输入描述:
一个整数 M,表示经过的天数(可以是任意非负整数,也可能很大)
📤 输出描述:
输出一个字符串,表示过了 M 天后的星期几(如 "Tuesday")
🧪 样例分析:
输入:7
今天是 Monday,过 7 天 → 又回到下个周一 → 输出:Monday
再比如:
过 1 天 → Tuesday
过 6 天 → Sunday
过 8 天 → 相当于过 1 天(因为 8 % 7 = 1)→ Tuesday
👉 所以这是一个典型的 周期为 7 的循环问题
✅ 二、代码分析
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
}
✅ 优点:
正确使用了 % 7 来处理周期性
判断条件覆盖了所有余数情况(0~6)
英文拼写准确,符合要求
✅ 三、更优的写法推荐(信奥常用技巧)
✅ 方法一:使用字符串数组(最推荐!)
#include <iostream>
using namespace std;
int main() {
string weekdays[7] = {"Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday"};
int M;
cin >> M;
cout << weekdays[M % 7] << endl;
return 0;
}
✨ 优势:
-清晰
时间复杂度 O(1)
易于修改和扩展
是信奥中常见的“打表法”思想体现
💡 提示:这种将枚举值预先存储在数组中的方式叫 查表法(Look-up Table),是竞赛中高频使用的技巧!
✅ 四、时间复杂度分析 🔍
我们现在> ❓ 计算时间复杂度
✅ 原始代码的时间复杂度:
T(n) = O(1)
📌 分 无论输入 n 是多大(哪怕 n=10^9),程序都只做以下事情:
读入一个整数(O(1))
计算一次(常数时间)
执行最多 7 次 if 判断(每次判断是常数时间)
输出一个字符串(每个字符串长度固定,最大是 Wednesday 共 10 字符,仍视为 O(1))
✅ 所以整体运行时间 不随输入规模增长而变化,属于 常数时间算法
⚠️ 注意:这里的 n 是数值本身,不是数据量大小。在算法分析中,当我们说“输入是一个整数”,通常认为它的处理时间为 O(1),除非涉及高精度或位级遍历。
🎯 结论:
✅ 时间复杂度:O(1)
✅ **空间复杂度:O(1变量或一个固定长度数组)
✅ 五、信奥知识点总结(要掌握的)
知识点 说明
模运算(%) 处理周期性问题的核心工具,例如星期、时钟、循环队列等
周期性规律 星期每 7 天重复 → 利用 (起始 + 天数) % 7 定位
查表法(数组预存) 将结果预先存入数组,避免冗长 if/else,提高效率和可读性
常数时间操作 对单个整数的操作(加减乘除取模)、数组访问等均为 O(1)
💪📚