问题是
厨师大学一个学期有120个工作日,学校的要求是学生在学期中至少有75%的工作日在学校,否则该学生不及格。
Chef放了很多假,现在关心的是他是否能通过考勤要求,已经过了N个工作日,给你N个比特B1,B2,...,BN,Bi = 0表示Chef第i天缺席,Bi = 1表示Chef当天在场。
主厨有希望在学期末通过考试吗?
输入:
第一行包含T,即测试用例的数量。然后是测试用例。每个测试用例包含两行输入。每个测试用例的第一行包含一个整数N,即到目前为止的天数。每个测试用例的第二行包含长度为N的字符串BB,其中Bi表示第i天的状态。
输出:
对于每个测试用例,在一行中输出答案-如果Chef可以通过出勤要求,则为“YES”,否则为“NO”。
我想出了这个密码
#include <iostream>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
int a[n];
int cnt = 0;
for (int i = 0; i < n; i++) {
cin >> a[i];
if (a[i] == 1) {
cnt++;
}
}
if (cnt >= n-30) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
我不知道这密码有什么问题。
1条答案
按热度按时间42fyovps1#
我知道问题所在了。
您将看到一个测试用例,如下所示:
但是正试图以“整数乘整数”的方式读取它。由于
a[i]
是int
,cin >> a[i]
将以数字11111
而不是单个1
的形式读取它。不是一次阅读一个整数,而是一次读取一个字符。而且您也不需要
a
数组,因为您只是在计算1
出现的次数。还要注意== '1'
的比较(与字符文字的比较),而不是整数比较== 1
这应该可以修复它:
此外,计算字符
'0'
出现的次数并测试它是否超过30次不是更容易吗?