1570 - 最大的两个数

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

输入一个四行五列的矩阵,找出每列最大的两个数。

题目输入

输入第一行包括一个整数n(1<=n<=1000),接下来的四行每行包括五个整数。代表一个四行五列的矩阵,矩阵元素全部是整数。

题目输出

可能有多组测试数据,对于每组数据,按照样例输出的格式将每列最大的两个数输出,如果最大的两个数中的一个数在这一列中有多个相同的值,则行值取行值小的那一个。

    输出时要保留原矩阵的行列顺序,即在原矩阵中行值小的,在输出矩阵中的行值依然小。

输入/输出样例

输入格式

2
-9 17 -16 -50 19 
-26 28 8 12 14 
-45 -5 31 -23 11 
41 45 -8 -23 -14 
41 -46 -48 3 42 
32 -29 -34 -32 45 
-3 -24 21 -12 19 
-38 17 49 -15 44 

输出格式

-9 28 8 12 19 
41 45 31 -23 14 
41 -24 21 3 45 
32 17 49 -12 44 

C语言解答

#include <stdio.h>

int main ()
{
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
	int n;
	int num[2][5];
	int temp;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<2;j++)
			for(int k=0;k<5;k++)
				scanf("%d",&num[j][k]);
		for(int j=2;j<4;j++)
			for(int k=0;k<5;k++)
			{
				scanf("%d",&temp);
				if(num[0][k]<num[1][k]&&num[0][k]<temp)
				{
					num[0][k]=num[1][k];
					num[1][k]=temp;
				}
				if(num[1][k]<temp)
				{
					num[1][k]=temp;
				}
			}
			for(int i=0;i<2;i++)
			{
				int flagp=1;
				for(int j=0;j<5;j++)
				{
					//if(flagp)
					//	flagp=0;
					//else
					//	printf(" ");;
					//printf("%d",num[i][j]);
					printf("%d ",num[i][j]);
				}
				printf("\n");
			}
	}
}

C++解答

#include<stdio.h> 
#define P(z) for(i=0;i<5;++i)printf("%d ",z[i]);printf("\n"); 
int main(){ 
	int n,i,j,t,a[5],b[5]; 
	while(~scanf("%d",&n)){ 
		while(n--){
			scanf("%d%d%d%d%d%d%d%d%d%d",a,a+1,a+2,a+3,a+4,b,b+1,b+2,b+3,b+4);
			for(i=0;j=i%5,i<10;++i){ 
				scanf("%d",&t); 
				if(t>a[j]){ 
					if(a[j]<b[j]){ 
						a[j]=b[j];
						b[j]=t; 
					} else 
						b[j]=t; 
				} else if(t>b[j])
					b[j]=t; 
			} 
			P(a);P(b); 
		} 
	} 
}