问有几个队伍拿过第一名?
Posted 勇敢*牛牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了问有几个队伍拿过第一名?相关的知识,希望对你有一定的参考价值。
题目描述 牛村新开了一个系列赛,一个系列赛有m场比赛,比赛规则是解题数越多排名越前,如果前几名队伍解题数一样则会并列第一。
有n个神仙队伍完整参加了m场比赛,请问有几个队伍拿过第一名。
输入描述:
第一行输入两个整数n,m,表示队伍数量与m场比赛。
接下来n行输入一个数字矩阵,每行m个数字字符表示每场比赛的解题数量
1<=n,m<=100
输出描述:
输出一个整数表示拿过第一名的队伍数量
输入
3 5
91728
11828
11111
输出
3
思路:
- 首先利用二维数组存储每组比赛的解题数量
- 明白他不管到底那一次获得第一,要计算的是他的队伍数,而不是获胜的场次
- 也就是说只要这个队伍有一次这个获得第一名就记录
- 紧接着判断那一列有最大值,并且记录
- 再找出这个最大值出自哪一列,找见就记录加一并且跳出
- 然后输出这个值
代码描述1
#include <stdio.h>
#include <stdlib.h>
int main()
int n=0,m=0;
scanf("%d%d",&n,&m);
int i,j;
int a[100][100];
int b[100][100]=0;
int temp[100]=0;
//因为是字符数字,所以有%1d
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%1d",&a[i][j]);
//找出每列的最大值
for(i=0,j=0;j<m;j++)
while(i<n)
if(a[i][j]>temp[j])
temp[j]=a[i][j];
i++;
i=0;
//找出中最大值的位置
for(i=0,j=0;j<m;j++)
while(i<n)
if(temp[j]==a[i][j])
b[i][j]=1;
i++;
i=0;
int sum=0;
//统计这个位置在哪一组
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(b[i][j]==1)
sum++;
break;
printf("%d",sum);
return 0;
代码描述2
#include <stdio.h>
int main ()
int i,j,n,m,x=0,max;
int a[100][100]=0,b[100]=0;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%1d",&a[i][j]);
for(j=0;j<m;j++)
max=-1;
for(i=0;i<n;i++)
if(max<a[i][j])
max=a[i][j];
for(i=0;i<n;i++)
if(a[i][j]==max)
b[i]++;
for(i=0;i<n;i++)
if(b[i]>0)
x++;
printf("%d",x);
return 0;
以上是关于问有几个队伍拿过第一名?的主要内容,如果未能解决你的问题,请参考以下文章