阿里巴巴2018春季實習生招聘筆試題


 
/*
一個淘寶的訂單中包含n(10>=n>=1)種商品A1,A2,...,An,每種商品數量分別爲a1,a2,...,an個,記做{a1,a2,...,an}(ak>0)。訂單在倉庫生產過程中,倉庫爲了提升作業效率,會提前對熱門組合商品進行預包裝。假設這n個商品有m(9>=m>=1)個商品組合,每個組合bomk包含A1,A2,...,An的數量分別爲{b1,b2,...,bn}(bk>=0,至少存在一個bk>0)

舉例如下:

訂單包含A,B,C商品,數量爲{2,3,1},商品組合bom1{2,1,1},bom2{1,1,0},bom3{0,1,1}

 

對以上訂單匹配給定商品組合,得到的可能匹配結果爲:res1.匹配到組合1一套,剩餘B商品;res2.匹配到組合2兩套,組合3一套,不剩商品;

現要求訂單的最優匹配,最優匹配的原則爲:1.匹配組合後,剩餘商品種類數越少越好;2.在剩餘商品種類數相同的情況下,匹配到的組合種類數越少越好;

例如上面例子,我們認爲res2優於res1。

 

現需要編寫程序,輸入格式爲:

n,m

a1,a2,...,an

bom1,b11,b12,...,b1n

bom2,b21,b22,...,b2n

....

bomm,bm1,bm2,...,bmn

 

輸入數據的格式說明(數據間使用英文逗號分隔):

第一行數據:n個商品,m個預包方案

第二行數據:商品1個數,商品2個數,。。。,商品n個數

第三行數據:bom1,商品1個數,商品2個數,。。。,商品n個數

第n-1行數據:。。。。

第n行數據:bomn,商品1個數,商品2個數,。。。,商品n個數

 

針對輸入數據找出最優匹配,輸出最優匹配的組合及套數,比如針對上面的例子輸出:

match result:

bom2*2,bom3*1

注:輸出結果有多個時可以亂序

已輸入字數: 1562 / 10000   運行 編程說明 -
編譯器版本: Java 1.8.0_66
請使用標準輸入輸出(System.in, System.out);已禁用圖形、文件、網絡、系統相關的操作,如java.lang.Process , javax.swing.JFrame , Runtime.getRuntime;不要自定義包名稱,否則會報錯,即不要添加package answer之類的語句;您可以寫很多個類,但是必須有一個類名爲Main,並且爲public屬性,並且Main爲唯一的public class,Main類的裏面必須包含一個名字爲'main'的靜態方法(函數),這個方法是程序的入口
時間限制: 3S (C/C++以外的語言爲: 5 S)   內存限制: 128M (C/C++以外的語言爲: 640 M)
輸入:
輸入數據的格式說明(數據間使用英文逗號分隔): 第一行數據:n個商品,m個預包方案 第二行數據:商品1個數,商品2個數,。。。,商品n個數 第三行數據:bom1,商品1個數,商品2個數,。。。,商品n個數 第n-1行數據:。。。。 第n行數據:bomn,商品1個數,商品2個數,。。。,商品n個數
輸出:
輸出最優匹配的組合及套數
輸入範例:
3,3
2,3,1
bom1,2,1,1
bom2,1,1,0
bom3,0,1,1
輸出範例:
match result:
bom2*2
bom3*1
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Main {
    /** 請完成下面這個函數,實現題目要求的功能 **/
    /** 當然,你也可以不按照這個模板來作答,完全按照自己的想法來 ^-^  **/
    public static void main(String[] args) {

        List<Integer> order = new ArrayList<Integer>();
        Map<String, List<Integer>> boms = new HashMap<String, List<Integer>>();

        Scanner in = new Scanner(System.in);
        String line = in.nextLine();

        Integer n = Integer.parseInt(line.split(",")[0]);
        Integer m = Integer.parseInt(line.split(",")[1]);

        line = in.nextLine();
        String[] itemCnt = line.split(",");
        for(int i = 0; i < n ; i++){
            order.add(Integer.parseInt(itemCnt[i]));
        }

        for(int i = 0; i < m; i++){
            line = in.nextLine();
            String[] bomInput = line.split(",");
            List<Integer> bomDetail = new ArrayList<Integer>();

            for(int j = 1; j <= n; j++ ){
                bomDetail.add(Integer.parseInt(bomInput[j]));
            }
            boms.put(bomInput[0], bomDetail);
        }
        in.close();

        Map<String, Integer> res = resolve(order, boms);

        System.out.println("match result:");
        for(String key : res.keySet()){
            System.out.println(key+"*"+res.get(key));
        }
    }

    // write your code here
    public static Map<String, Integer> resolve(List<Integer> order, Map<String, List<Integer>> boms) {
    	Map<String, Integer> map=new HashMap<String, Integer>();
    	return map;
    }
}

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章