问题遇到的现象和发生背景 1: 教授的课(程序设计基础第9周编程1)
描述
教授正在为一个有N个学生的班级讲授离散数学课。他对某些学生缺乏纪律性很不满意,于是决定:如果课程开始后上课的人数小于K,就取消这门课程。
从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。如果该门课程被取消,则输出“Yes”,否则输出“No”。
假设教授在时刻0开始上课。
①如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。
②如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。
③如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。
假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。
已知函数原型:
//函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0
int IsCancel(int a[], int n, int k);
输入
包括两行数据:
第1行是n,k的值。
第2行是学生的到达时间。
输出
课程被取消,输出"YES"
课程不取消,输出"NO"
样例
输入
20 10
-8 -5 3 6 0 0 -7 -4 -5 7 -4 -1 1 1 2 -6 -2 2 -9 3
输出
NO
提示
输入提示:“Input n,k:\n”
用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>
int IsCancel(int a[],int n,int k);
int main()
{
int n,k,b;
printf("n,k:\n");
scanf("%d",&n);
scanf("%d",&k);
int a[1000];
b=IsCancel(a,n,k);
if(n>=0&&n<=1000&&k>1&&n>=k){
if(b==1){
printf("YES\n");
}else if(b==0){
printf("NO\n");
}
}
return 0;
}
int IsCancel(int a[1000],int n,int k)
{
int i;
int cnt=0;
int ret=0;
for(i=0;i<1000;i++){
a[i]=0;
}
i=0;
int x,y=0;
do{
scanf("%d",&x);
a[i++]=x;
y++;
}while(getchar()!='\n');
if(a[i]>=-100&&a[i]<=100){
for(i=0;i<y;i++){
if(a[i]<=0){
cnt++;
}
}
}
if(cnt>=k){
ret=0;
}else{
ret=1;
}
return ret;
}
运行结果及报错内容
输出结果错误: 第1行
输出结果错误: 第1行
输出结果错误: 第1行
输出结果错误: 第1行
输出结果错误: 第1行
我的解答思路和尝试过的方法
试了几组数据都没问题,不知道哪里出了问题
我想要达到的结果
输出结果正确