このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 132代目 #610 # >>606さん # # 問題 # A さんと B さんがゲームで対戦した.対戦は N 回にわたって行った.各回の対戦において, # より高い点数を獲得した人がその回の勝者となる. # すなわち,第 i 回目の対戦で # A さんの点数が B さんの点数より大きければ第 i 回目は A さんの勝ち, # B さんの点数が A さんの点数より大きければ B さんの勝ち, # 同点の場合はどちらの勝ちにもならない. # N 回の対戦における A さんと B さんの点数が与えられたとき, # A さんと B さんがそれぞれ何回勝ったかを出力するプログラムを作成せよ. # # 入力 # 入力は 1+N 行からなる. # 1 行目には対戦の回数 N (1 ≦ N ≦ 1000000) が書かれている. # 2 行目以降の i+1 行目 (1 ≦ i ≦ N) には i 回目の対戦における A さんと B さんの点数が空白区切りで書かれている. # 各々の点数は 0 以上 100 以下の整数である. # # 出力 # 出力は 1 行からなる. A さんが勝った回数と B さんが勝った回数をこの順に空白で区切って出力せよ. # # # # となっています # 入力データ2までとかならまだ件数が少ないので良いのですが、 # 入力データ5になると1万件の入力データがあるのでファイルを読み込む以外は無いと思いました # # そのサイトに行ってもどうすればいいか良く解りませんでした # ですので、書き方ではなくてソースを書いてください お願いします # # 'A さんと B さんがゲームで対戦した.対戦は N 回にわたって行った.各回の対戦において, より高い点数を獲得した人がその回の勝者となる. すなわち,第 i 回目の対戦で A さんの点数が B さんの点数より大きければ第 i 回目は A さんの勝ち, B さんの点数が A さんの点数より大きければ B さんの勝ち, 同点の場合はどちらの勝ちにもならない. N 回の対戦における A さんと B さんの点数が与えられたとき, A さんと B さんがそれぞれ何回勝ったかを出力するプログラムを作成せよ, 入力 入力は 1+N 行からなる. 1 行目には対戦の回数 N (1 ≦ N ≦ 1000000) が書かれている . 2 行目以降の i+1 行目 (1 ≦ i ≦ N) には i 回目の対戦における A さんと B さんの点数が空白区切りで書かれている. 各々の点数は 0 以上 100 以下の整数である.' :- 'ユーザーパラメータからファイル名を取得して、そのファイルから読み出す。 入力は 1+N 行からなる. 1 行目には対戦の回数 N (1 ≦ N ≦ 1000000) が書かれている . 2 行目以降の i+1 行目 (1 ≦ i ≦ N) には i 回目の対戦における A さんと B さんの点数が空白区切りで書かれている. 各々の点数は 0 以上 100 以下の整数である.'(LL), '各行の勝ちならびを取得し、AとBの勝った回数を表示する'(LL). 'ユーザーパラメータからファイル名を取得して、そのファイルから読み出す。 入力は 1+N 行からなる. 1 行目には対戦の回数 N (1 ≦ N ≦ 1000000) が書かれている . 2 行目以降の i+1 行目 (1 ≦ i ≦ N) には i 回目の対戦における A さんと B さんの点数が空白区切りで書かれている. 各々の点数は 0 以上 100 以下の整数である.'(N,LL) :- current_prolog_flag(argv,[_ファイル名]), 二行目からの各行を区切り項目として取り出す(_ファイル名,LL). 二行目からの各行を区切り項目として取り出す(_ファイル名,_区切り項目ならび) :- see(_ファイル名), findall(_区切り項目,( 一行ずつ区切り項目として読み出す(_区切り項目), ('end_of_fileに達したならば入力を閉じる'(_区切り項目),!,fail;true)),[[N]|_区切り項目ならび]). 一行ずつ区切り項目として読み出す(_区切り項目) :- repeat, readln(_区切り項目). 'end_of_fileに達したならば入力を閉じる'(end_of_file) :- seen. '各行の勝ちならびを取得し、AとBの勝った回数を表示する'(LL) :- '各行の勝者を取得し、'(LL,_勝ちならび), 'AとBの勝った回数を表示する'(_勝ちならび,_Aの勝った回数,_Bの勝った回数), 各行の勝者を取得する(LL,_勝ちならび) :- findall(_勝ち,( member([_A,_B],LL), 勝ち(_A,_B,_勝ち)),_勝ちならび). 勝ち(_A,_B,'A') :- _A is max(_A,_B). 勝ち(_A,_B,'B') :- _B is max(_A,_B). 'AとBの勝った回数を表示する'(_勝ちならび,_Aの勝った回数,_Bの勝った回数) :- 'AとBの勝った回数を'(_勝ちならび,_Aの勝った回数,_Bの勝った回数), 表示する(_Aの勝った回数,_Bの勝った回数). 'AとBの勝った回数を'(_勝ちならび,_Aの勝った回数,_Bの勝った回数) :- 度数(member('A',_勝ちならび),_Aの勝った回数), 度数(member('B',_勝ちならび),_Bの勝った回数). 度数(_目標,_度数) :- findall(_,_目標,L), length(L,_度数). 表示する(_Aの勝った回数,_Bの勝った回数) :- writef('Aの勝った回数は%w、Bの勝ったか回数は%wです。\n',[_Aの勝った回数,_Bの勝った回数]).