矩阵中最大的两个数

来源:互联网 发布:监控软件慧眼下载 编辑:程序博客网 时间:2024/06/16 03:27

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:3795

解决:989

题目描述:

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

输入:

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

输出:

    可能有多组测试数据,对于每组数据,按照样例输出的格式将每列最大的两个数输出,如果最大的两个数中的一个数在这一列中有多个相同的值,则行值取行值小的那一个。
    输出时要保留原矩阵的行列顺序,即在原矩阵中行值小的,在输出矩阵中的行值依然小。

样例输入:
11  2   4  9  8-1  4  9  8  812  9  8  7  07   8  9  7  0
样例输出:
12 9 9 9 8 7 8 9 8 8 
提示:

每个数字后面都要输出一个空格

来源:
2005年华中科技大学计算机保研机试真题
#include<stdio.h>#include<limits.h>struct  E{    int num;    int row;};int main(){    int n,j,i;    E a[4][5];    E b[2][5];    E temp;    while(scanf("%d",&n)!=EOF)    {        for(i=0; i<4; i++)        {            for(j=0; j<5; j++)            {                scanf("%d",&a[i][j].num);                a[i][j].row=i;            }        }        for(j=0; j<5; j++) //找粗最大的两个数        {            b[0][j].num=INT_MIN;            b[1][j].num=INT_MIN;            for(i=0; i<4; i++)            {                if(a[i][j].num>b[0][j].num)                {                    b[0][j]=a[i][j];                }            }            for(i=0; i<4; i++)            {                if(b[0][j].row!=a[i][j].row&&a[i][j].num>b[1][j].num)                {                    b[1][j]=a[i][j];                }            }        }        for(j=0; j<5; j++) //按行号小的在前        {            if(b[0][j].row>b[1][j].row)            {                temp=b[1][j];                b[1][j]=b[0][j];                b[0][j]=temp;            }        }        for(i=0; i<2; i++)        {            for(j=0; j<5; j++)            {                printf("%d ",b[i][j].num);            }            printf("\n");        }    }    return 0;}

原创粉丝点击