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");}}

勝者判定が煩わしいので削れそうな気がします.