AOJ 0205 - Rock, Paper, Scissors
2人から5人へと進化したじゃんけん問題
break使ってる時点でgotodisれないとTwitterで見た気がした.
最初,全員が同じ手を出したらあいこという条件を忘れていました.
#include <iostream> int main(){ //紙 3 はさみ 2 石 1 bool eflag = false; while(!eflag){ int hands[5] = {0}, things[4] = {0}; for(int i=0;i<5&&!eflag;i++){ int n; std::cin >> n; hands[i] = n, things[n]++; if(!n)eflag = true; } if(!eflag){ int winner = 0; if(things[1] && things[2] && things[3]) winner = -1; else if(things[1] && things[2]) winner = 1; else if(things[2] && things[3]) winner = 2; else if(things[1] && things[3]) winner = 3; else winner = -1; for(int i=0;i<5;i++){ if(winner < 0) std::cout << "3\n"; else if(hands[i] == winner) std::cout << "1\n"; else std::cout << "2\n"; } } } }
ショートコーディング(230byte)
#include <cstdio> main(){while(1){int h[5]={0},t[4]={0},w=0;for(;w<5;w++){scanf("%d",h+w);t[h[w]]++;if(!*h)return 0;}w=t[1]&&t[2]&&t[3]?-1:t[1]&&t[2]?1:t[2]&&t[3]?2:t[1]&&t[3]?3:-1;while((*t)++<5)puts(w<0?"3":h[*t-1]-w?"2":"1");}}
勝者判定が煩わしいので削れそうな気がします.