1. 程式人生 > >1344: 最小的數

1344: 最小的數

1344: 最小的數

時間限制: 1 Sec  記憶體限制: 256 MB

題目描述

給你兩個一維陣列(都為大於等於1且小於等於9的數),從第一個陣列中取至少一個數字,再從第二個陣列中取至少一個數字,用你選取的數字組成一個整數,求能組成的最小整數。
如果從第一個陣列中選取的數與從第二個陣列中選取的數相等,只保留一個即可。

 

輸入

第一行:一個整數T,表示測試例項個數
對於每組測試例項:

第一行:包含兩個整數n 和 m (1 ≤ n, m ≤ 9) —— 分別表示兩個陣列的大小
第二行:包含n個整數a1, a2, ..., a

n (1 ≤ ai ≤ 9) ——第一個陣列

第三行:包含m個整數 b1, b2, ..., bm (1 ≤ bi ≤ 9) 第二個陣列

 

 

輸出

每組測試例項輸出一行:包含一個整數 —— 能組成的最小整數

 

樣例輸入

2
2 3
4 2
5 7 6
8 8
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1

 

樣例輸出

25
1
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        int n = sc.nextInt();
        int a[];
        int b[];
        int fif[] = new int[n];
         
        for (int i = 0; i < n; i++) {
            a = new int[sc.nextInt()];
            b = new int[sc.nextInt()];
             
            for (int j = 0; j < a.length; j++) {
                a[j] = sc.nextInt();
            }
            for (int j = 0; j < b.length; j++) {
                b[j] = sc.nextInt();
            }
            fif[i] = f(a,b);
        }
         
        for (int i = 0; i < fif.length; i++) {
            System.out.println(fif[i]);
        }
    }
 
    private static int f(int[] a, int[] b) {
        int temp = 99;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) {
                if(a[i]==b[j]) {
                    temp = Math.min(a[i], temp);
                    break;
                }else if(a[i]<b[j])
                    temp = Math.min(a[i]*10+b[j], temp);
                else
                    temp = Math.min(b[j]*10+a[i], temp);
            }
        }
        return temp;
    }
}
/**************************************************************
    Problem: 1344
    User: 20161514325
    Language: Java
    Result: 正確
    Time:242 ms
    Memory:14664 kb
****************************************************************/