このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 141代目 #535 # [1] 授業単元:C++ # [2] 問題文(含コード&リンク): # 入力:二つの整数n,m # 出力:1からnまでの番号札を持った人が、番号順に円陣を組んでいる。 #      最初に、1番札の人からm番目の人が退席する(円陣は1減) #      続いて、その次からm番目の人が退席する。これを繰り返したときの、 #      退席者の順番を求め、出力せよ。 #     -例:n = 9,m = 5のとき、退席者の順番は5,1,7,4,3,6,9,2,8 # '1からnまでの番号札を持った人が、番号順に円陣を組んでいる。最初に、1番札の人からm番目の人が退席する(円陣は1減)続いて、その次からm番目の人が退席する。これを繰り返したときの、退席者の順番を求め、出力せよ。'(_n,_m) :- findall(_退席者,( '1からnまでの番号札を持った人が、番号順に円陣を組んでいる。最初に、1番札の人からm番目の人が退席する(円陣は1減)続いて、その次からm番目の人が退席する。これを繰り返したときの、退席者の順番を求める。'(_n,_m,_退席者,_残りならび)),_退席者ならび), writef('%w\n',[_退席者ならび]). '1からnまでの番号札を持った人が、番号順に円陣を組んでいる。最初に、1番札の人からm番目の人が退席する(円陣は1減)続いて、その次からm番目の人が退席する。これを繰り返したときの、退席者の順番を求める。'(_n,_m,_退席者,_残りならび) :- '1からnまでの番号札を持った人が、番号順に円陣を組んでいる。'(_n,L), succ(_m_1,_m), ならびを回転して先頭に当たった人が退席する(L,_m_1,_退席者,_残りならび). '1からnまでの番号札を持った人が、番号順に円陣を組んでいる。'(_n,L) :- findall(N,between(1,_n,N),L). ならびを回転して先頭に当たった人が退席する(L,_m_1,_退席者,_残りならび) :- ならびの回転(左方向,_m_1,L,[_退席者_1|_残りならび_1]), ならびを回転して先頭に当たった人が退席する(_残りならび_1,_m_1,_退席者_1,_退席者,_残りならび). ならびを回転して先頭に当たった人が退席する(_残りならび,_m_1,_退席者,_退席者,_残りならび). ならびを回転して先頭に当たった人が退席する(_残りならび_1,_m_1,_,_退席者,_残りならび) :- ならびを回転して先頭に当たった人が退席する(_残りならび_1,_m_1,_退席者,_残りならび). ならびの回転(左方向,0,L,L) :- !. ならびの回転(左方向,_m,L1,L) :- ならびの回転(左方向,L1,L2), succ(_m_1,_m), ならびの回転(左方向,_m_1,L2,L). ならびの回転(左方向,L1,L2) :- append([A],B,L1), append(B,[A],L2).