このディレクトリの索引

# 出典 :: スレ立てるまでもない質問はここで135匹目 #794" # 100という整数があります # これを25から40の範囲の整数として3等分します # 例 # 30, 30, 40 # 35, 35, 30 # 25, 40, 35 '100という整数があります。これを25から40の範囲の整数として3分割します。'(_整数_1,_整数_2,_整数_3) :- '25から40の範囲の整数ならび'(_25から40の範囲の整数ならび), 'ここでの3分割とは25から40の範囲の整数ならびから3つの整数を重複を許して取り出し、その合計が100となるということである'(_25から40の範囲の整数ならび,_整数_1,_整数_2,_整数_3). '25から40の範囲の整数ならび'(_25から40の範囲の整数ならび) :- findall(_整数,between(25,40,_整数),_25から40の範囲の整数ならび). 'ここでの3分割とは25から40の範囲の整数ならびから3つの整数を重複を許して取り出し、その合計が100となるということである'(_25から40の範囲の整数ならび,_整数_1,_整数_2,_整数_3) :- 重複順列(_25から40の範囲の整数ならび,3,[_整数_1,_整数_2,_整数_3]), 100 is _整数_1 + _整数_2 + _整数_3. 重複順列(L,0,[]). 重複順列(L,N,_重複順列) :- '順にN桁、Lの要素を振り分けて行く'(L,N,_重複順列). '順にN桁、Lの要素を振り分けて行く'(L,N,[A|R3]) :- N > 0, member(A,L), succ(N_1,N), 重複順列(L,N_1,R3).