问有几个队伍拿过第一名?

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;
 

以上是关于问有几个队伍拿过第一名?的主要内容,如果未能解决你的问题,请参考以下文章

ACM/ICPC亚洲区大概总共多少名额?

开园第一篇

队伍统计

JZOJ 5230. 队伍统计

Android - 选项卡式片段

将数据从嵌套片段发送到父片段