题目描述
期末考试结束了,Ms.White拿到一个班级的成绩册,本班级有n个学生,本学期有m门课程,每个学生每门课的成绩是1到9之间的一个整数。
如果某个学生的某一门课程得了该课程的最高分(最高分可以不唯一),则可以说该学生在该课程上是最优的。如果一个学生至少在一门课程上是最优的,Mr.White就认为该学生是成功的。Mr.White想知道在他的班上有多少学生是成功的。你能帮帮他吗?
输入
输入第一行是两个整数n和m(1 <= n,m <= 100),n是学生人数,m是课程数;接下来n行,每行包含m个数字,表示一个学生的m门课程的成绩,数据之间用空格隔开。
输出
输出一个整数,表示班级中成功学生的人数。
样例输入 Copy
4 5 9 1 7 3 8 1 2 8 4 8 1 2 1 1 1 8 1 7 1 7
样例输出 Copy
3
提示
第1,2,3 号学生是成功的
#include <stdio.h>
int main()
{ int n,m,i,j;
int a[102][102];
int c[102];
int max,sum=0;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++) /*此处输入*/
{ for(j=1;j<=m;j++)
scanf("%d",&a[i][j]);
}
int k=1;
for(i=1;i<=m;i++) /*这里是先列后行哦*/
{ max=0;
for(j=1;j<=n;j++) /*判断每一列的最大值*/
{ if(a[j][i]>max)
max=a[j][i];
}
c[k++]=max; /*存到数组c中*/
}
for(i=1;i<=n;i++)
{ for(j=1;j<=m;j++)
{ if(a[i][j]==c[j]) /*从第一行第一列开始判断*/
{ /*因为j变化,那么列变化,那么c中的数也变化,即转到下一个科目*/
sum++;/*每一行的每一列表示一课成绩,然后如果跟c相等就表明成功,就加一*/
break;/*然后退出列的循环开始第二行寻找*/
}
}
}
printf("%d",sum);
return 0;
}