最大两个数

输入描述:
接下来的四行每行包括五个整数。代表一个四行五列的矩阵,矩阵元素全部是整数。
输出描述:
可能有多组测试数据,对于每组数据,按照样例输出的格式将每列最大的两个数输出,如果最大的两个数中的一个数在这一列中有多个相同的值,则行值取行值小的那一个。
输出时要保留原矩阵的行列顺序,即在原矩阵中行值小的,在输出矩阵中的行值依然小。
示例1
输入

1 2 4 9 8
-1 4 9 8 8
12 9 8 7 0
7 8 9 7 0
输出

12 9 9 9 8
7 8 9 8 8

#include <stdio.h>
#include <math.h>
#include <string.h>
#define MIN -1000000
int main (){
	int a[4][5]={};
	for(int i=0;i<4;i++){
		for(int j=0;j<5;j++){
			scanf("%d",&a[i][j]);
		}
	}
	
	for(int j=0;j<5;j++){
		//查找并记录每列最小值及次小值 
	int m1=a[0][j] ,m2 =a[1][j];
	
	for(int i=1 ;i<4;i++){
		if(a[i][j]<m2){//先比较m2 因为m1是最小的 应该要后确定 
			m2=a[i][j];
		}
		if(a[i][j]<m1){
			m2=m1;
			m1=a[i][j];
		} 
		
	} 

          //最小的往后移                最大和次大的数之间没有比较  所以不存在两两交换导致的错位问题 
            for(int k=0;k<4;k++){
                if(a[k][j]==m1&&k+1<=3){//k<3才需要交换 
                    a[k][j]=a[k+1][j];
                    a[k+1][j]=m1;
                }
            }
            //次小的往后移
            for(int l=0;l<3;l++){
                if(a[l][j]==m2&&l+1<=2){ //k<2才需要交换 
                    a[l][j]=a[l+1][j];
                    a[l+1][j]=m2;
                }
            }	
		
		
	}
	
for(int i=0;i<2;i++){
		for(int j=0;j<5;j++){
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}

	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值