競プロというと、あるお題が出され、テキストベースのテストデータが入力されると、ある結果を出力するように期待される。
今回は、じゃんけんプログラムを普通に作ったところで面白くないから、自分が出す手と勝負する回数をあらかじめ入力し、CPUと勝負した結果を出力するというじゃんけんを作る。
問題文
自分が勝負したい回数(N)を最初に入力し、その後、自分が出す予定の手(グー=0、チョキ=1、パー=2)をN回入力する。その後、CPUと対戦をし、その結果(あなたの勝ち=a、負け=b、あいこ=c)を出力せよ。
制約
- 1≦N≦100
入力
入力は以下の形式で標準入力される。
N
012
出力
a
b
c
入力例1
5
02102
出力例
あなたの勝ち:2回
CPUの勝ち:1回
あいこ:2回
なお、あくまでこれは基本回答であるからして、創造力(クリエイティビティ:配点20)が高い出力結果を出してもよい。
回答例
qiita.cs
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceJanken{publicclassProgram{publicstaticstring[]jankenAA={"\nグー! __\n /」」」」\n |っ丿\n ∧_∧ / /\n ( ・ω・)/\n (つ ノ\n u-u","\nチョキ!\n (V)\n /アE)\n ∧_∧ / /\n ( ・ω・)/\n (つ ノ\n u-u","\nパー!\n 「「「h\n C ノ\n ∧_∧ / /\n ( ・ω・)/\n (つ ノ\n u-u"};publicstaticvoidMain(string[]args){Console.WriteLine("※説明:最初に何回じゃんけんをするか回数を入力する。\nその後、回数分の自分の出すじゃんけん数値を入れる。\nグー=0、チョキ=1、パー=2");try{intn=int.Parse(Console.ReadLine());int[]jankMe=newint[n];for(inti=0;i<n;i++){stringjankme=Console.ReadLine();if(!(jankme.Equals("0")||jankme.Equals("1")||jankme.Equals("2"))){Console.WriteLine("じゃんけん番号じゃないです");i-=1;continue;}jankMe[i]=int.Parse(jankme);}for(intj=0;j<n;j++){//Console.Clear();Console.WriteLine("最初はグー、じゃんけん…");intpjank=Player(jankMe[j]);intcpjank=Cpu();Judge(pjank,cpjank);}Statistics(judgeList);Console.ReadKey(true);}catch(Exceptione){stringm=e.Message;Console.WriteLine(m);Console.ReadKey(true);}}/// <summary>/// プレイヤー/// </summary>/// <returns>じゃんけん番号</returns>publicstaticintPlayer(intjankMeNow){stringjanken=null;boolloopFlg=true;//while (loopFlg)//{//janken = Console.ReadLine();janken=jankMeNow.ToString();if(!(janken.Equals("0")||janken.Equals("1")||janken.Equals("2"))){Console.WriteLine("0か1か2で入れてください。");loopFlg=true;}else{loopFlg=false;}//}intjank=int.Parse(janken);Display(0,jank);returnjank;}/// <summary>/// CPU/// </summary>/// <returns>じゃんけん番号</returns>publicstaticintCpu(){intrandomInt=Janken();Display(1,randomInt);returnrandomInt;}/// <summary>/// 画面への表示/// </summary>/// <param name="isPlayer"></param>/// <param name="jank"></param>publicstaticvoidDisplay(intisPlayer,intjank){if(isPlayer==0){Console.Write("あなたは、");}else{Console.Write("コンピューターは、");}Console.WriteLine(jankenAA[jank]);}/// <summary>/// ランダム関数/// </summary>publicstaticRandomrand=newRandom();/// <summary>/// CPUがランダムで出すじゃんけんの関数/// </summary>/// <returns>ランダムで出した数</returns>publicstaticintJanken(){intjank=rand.Next(3);returnjank;}/// <summary>/// ジャッジ/// </summary>/// <param name="player"></param>/// <param name="cpu"></param>publicstaticList<int>judgeList=newList<int>();publicstaticvoidJudge(intplayer,intcpu){intjudge=0;if((player==0&&cpu==1)||(player==1&&cpu==2)||(player==2&&cpu==0)){Console.WriteLine("【プレイヤーが勝ち】");judge=0;}elseif((cpu==0&&player==1)||(cpu==1&&player==2)||(cpu==2&&player==0)){Console.WriteLine("【CPUが勝ち】");judge=1;}else{Console.WriteLine("【あいこ】");judge=2;}judgeList.Add(judge);Console.Write("\n");}publicstaticvoidStatistics(List<int>jlist){intplayerWin=jlist.Where(j=>j==0).Count();intcpuWin=jlist.Where(j=>j==1).Count();intdraw=jlist.Where(j=>j==2).Count();Console.WriteLine(string.Format("プレイヤーの勝利数:{0}\nCPUの勝利数:{1}\nあいこ数:{2}",playerWin,cpuWin,draw));}}}
入力結果
※説明:最初に何回じゃんけんをするか回数を入力する。
その後、回数分の自分の出すじゃんけん数値を入れる。
グー=0、チョキ=1、パー=2
3
0
1
2
出力結果
最初はグー、じゃんけん…
あなたは、
グー! __
/」」」」
|っ丿
∧_∧ / /
( ・ω・)/
(つ ノ
u-u
コンピューターは、
グー! __
/」」」」
|っ丿
∧_∧ / /
( ・ω・)/
(つ ノ
u-u
【あいこ】
最初はグー、じゃんけん…
あなたは、
チョキ!
(V)
/アE)
∧_∧ / /
( ・ω・)/
(つ ノ
u-u
コンピューターは、
パー!
「「「h
C ノ
∧_∧ / /
( ・ω・)/
(つ ノ
u-u
【プレイヤーが勝ち】
最初はグー、じゃんけん…
あなたは、
パー!
「「「h
C ノ
∧_∧ / /
( ・ω・)/
(つ ノ
u-u
コンピューターは、
チョキ!
(V)
/アE)
∧_∧ / /
( ・ω・)/
(つ ノ
u-u
【CPUが勝ち】
プレイヤーの勝利数:1
CPUの勝利数:1
あいこ数:1
はい。