這題為 partial judge 的形式,請完成其中缺少的 unzip 與 zip 函數。
程式碼上傳時請選C語言,並遵從這個格式:
#include "function.h"
#include <stdlib.h>
List* zip(List *lptr1, List *lptr2)
{
/*your code here*/
}Pair* unzip(List *lptr)
{
/*your code here*/
}
題目敘述:
zip 函數的作用是將兩個 lists 合併,對應位置的元素組成一個 pair,然後產生一個新的 list 包含所有的 pairs。
也就是從兩個 lists 變成一個 list of pairs。
底下的表示法,方括號 [] 代表 list,圓括弧 () 代表 pair。
譬如第一個 list 是 [1,2,3] 而第二個是 ["a","b","c"],經過 zip 之後變成
[(1,"a"),(2,"b"),(3,"c")]。
接著如果再用第二個 list 和第一次 zip 之後的結果,再做一次 zip,結果會變成
[("a",(1,"a")),("b",(2,"b")),("c",(3,"c"))]
然後第一次 zip 和第二次 zip 得到的兩個 lists,再做第三次 zip 就變成
[((1,"a"),("a",(1,"a"))),((2,"b"),("b",(2,"b"))),((3,"c"),("c",(3,"c")))]
unzip 函數的作用是將 a list of pairs 變成 a pair of lists。
底下的表示法,方括號 [] 代表 list,圓括弧 () 代表 pair。
譬如原本的 list of pairs 是 [(1,"a"),(2,"b"),(3,"c")],經過 unzip 之後變成 ([1,2,3],["a","b","c"])。
如果有兩個 lists [1,2,3] 和]["a","b","c"],先做第一題描述的兩次 zip,變成
[("a",(1,"a")),("b",(2,"b")),("c",(3,"c"))] 之後,如果再做一次 unzip 就變成
(["a","b","c"],[(1,"a"),(2,"b"),(3,"c")])
這一題要做的就是,輸入兩個 lists,經過 N 次 zip 之後,再做一次 unzip,然後輸出最後產生的 pair。
上述的操作已經寫在範例程式中,只要將 unzip 正確寫出,就能產生上述的執行結果。
Hint:
輸入資料會有五行。
第一行是一個整數 M1,代表第一個 list 包含的資料筆數,第二行則是 M1 筆資料,每筆用空白隔開。
第三行是一個整數 M2,代表第二個 list 包含的資料筆數,第四行則是 M2 筆資料,每筆用空白隔開。
第五行則是一個整數 N。代表執行 zip 的次數。
輸出只有一行,列出經過 N次 zip 之後再做一次 upzip 得到的 pair 內容。最後有換行。