このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 130代目 #615 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # ソートされた2つの配列A[N], B[N]が与えられる。 # AとBのそれぞれの要素を足して得られる、長さN*Nの配列、すなわち # for(int i = 0; i < N; i++) # for(int j = 0; j < N; j++) # C[i * N + j] = A[i] + B[j]; # のC[]をソートした配列を、 # およそN*Nに比例する時間で得るプログラムを作成せよ。 # ただし、Nは4000以下、A[], B[]の要素は絶対値が2の28乗以下の整数であるとしてよい。 'ソートされた2つの配列A[N], B[N]が与えられる。 AとBのそれぞれの要素を足して得られる、長さN*Nの配列、すなわち for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) C[i * N + j] = A[i] + B[j]; のC[]をソートした配列を、 およそN*Nに比例する時間で得る'(AL,BL,_CLを整列したならび) :- 'ALとBLのそれぞれの要素を足して得られる、長さN*Nのならび、すなわちCLを'(AL,BL,CL), 'CLを整列したならびを得る'(CL,_CLを整列したならび). 'AとBのそれぞれの要素を足して得られる、長さN*Nのならび、すなわちCLを'(AL,BL,CL) :- findall(C,( 'ALの要素AとBLの要素Bを足して得られるC'(AL,BL,C)),CL). 'ALの要素AとBLの要素Bを足して得られるC'(AL,BL,C) :- 'ALの要素AとBLの要素Bを'(AL,BL,A,B), C is A + B. 'ALの要素AとBLの要素Bを'(AL,BL,A,B) :- member(A,AL), member(B,BL). 'CLを整列したならびを得る'(CL,_CLを整列したならび) :- msort(CL,_CLを整列したならび).