テーマ1200:最大の二つの数ACM C言語実現



  
  
  
  
 
    
#include<stdio.h> 
#define P(z) for(i=0;i<5;++i)printf("%d ",z[i]);printf("
"); 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); } } }

タイトルの説明:
4行5列のマトリクスを入力し、各列の最大数を2つ見つけます.
入力:
入力された最初の行には整数n(1<=n<=1000)が含まれ、次の4行には各行に5つの整数が含まれます.4行5列のマトリクスを表し、マトリクス要素はすべて整数です.
出力:
複数のテストデータのグループがあり、各グループのデータについて、サンプル出力のフォーマットに従って各列の最大2つの数を出力し、最大2つの数のうちの1つがこの列に同じ値が複数ある場合、行値は行値の小さいものを取ります.
出力するときは、元のマトリクスの行列順序を保持します.すなわち、元のマトリクスでは行値が小さく、出力マトリクスでは行値が小さくなります.
サンプル入力:
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