C++代码无法正确解决出勤达标判断问题,求错误排查
问题分析与修正
错误原因
你的代码逻辑完全偏离了题目要求:
- 题目核心是判断当前出勤天数 + 剩余工作日全勤后的总天数是否≥90,而你写的
cnt >= n-30没有任何逻辑依据,这是导致错误的根本原因。 - 额外问题:C++标准不支持
int a[n]这种变长数组,虽然部分编译器兼容,但建议使用vector<int>或固定大小容器以保证可移植性。
正确解法逻辑
- 计算当前已出勤天数
cnt; - 计算剩余工作日天数:
remaining = 120 - n; - 计算后续全勤后的总出勤天数:
total = cnt + remaining; - 若
total >= 90则输出YES,否则输出NO。
修正后的代码
#include <iostream> #include <vector> using namespace std; int main() { int t; cin >> t; while (t--) { int n; cin >> n; vector<int> a(n); int cnt = 0; for (int i = 0; i < n; i++) { cin >> a[i]; if (a[i] == 1) { cnt++; } } int total = cnt + (120 - n); if (total >= 90) { cout << "YES\n"; } else { cout << "NO\n"; } } return 0; }
验证示例
- 示例1:n=60,当前出勤60天,剩余60天全勤,总出勤120≥90 → YES
- 示例2:n=120,当前出勤89天,总出勤89<90 → NO
- 示例3:n=90,当前出勤80天,剩余30天全勤,总出勤110≥90 → YES
内容的提问来源于stack exchange,提问作者Dishant Kumar Yadav
相关产品推荐
相关产品推荐

