教授的课(10分)
教授正在为一个有N个学生的班级讲授离散数学课。他对某些学生缺乏纪律性很不满意,于是决定:如果课程开始后上课的人数小于K,就取消这门课程。
从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。如果该门课程被取消,则输出“Yes”,否则输出“No”。
假设教授在时刻0开始上课。
①如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。
②如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。
③如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。
假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。
图片中的“输入提示”“Input n,k:\n”只能注释掉,要求的输入格式“%d,%d”的逗号也需要改成空格,否则编译不会过关
已知函数原型:
//函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0
int IsCancel(int a[], int n, int k);
输入格式:
“%d %d”
“%d”
输入包括两行数据:
第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
时间限制:500ms内存限制:32000kb
#include<stdio.h>
int IsCancel(int a[],int n,int k);
int main(void){
int result;
int n,k;
int i;
scanf("%d %d",&n,&k); //输入共有多少学生:n,以及来上课的最小人数k
if(k<1000){
int a[n];
i = 0;
for( ;i < n;i ++){
scanf("%d",&a[i]); //输入到达时间
if(a[i]>100||a[i]<-100){
continue;
}
}
//printf("k=%d\n",k);
result = IsCancel(a,n,k); //注意调用函数时数组的写法
switch(result){ //如果写成a[n]会显示warning;写成a[]会显示error
case 1:printf("YES");
break;
case 0:printf("NO");
break;
}
}
return 0;
}
int IsCancel(int a[],int n,int k)
{
int i,late=0,before=0,ret;
// scanf("%d,%d",&n,&k);
for(i = 0;i < n;i++)
{
if(a[i]>0){
late ++;
}
else{
before ++;
}
}
//printf("late=%d\nbefore=%d\n",late,before);
switch(before < k){
case 1: ret = 1;
break;
case 0: ret = 0;
break;
}
return ret;
}
(我是学生,编程纯小白,在这里分享一些自己学习过程中的经验吧。希望和大家交流,有错误希望大家加以指正)