PKU : 3210 - Coins

問題概要

http://poj.org/problem?id=3210

N枚のコインがあったとき, 何回裏返したら全てのコインの面が同じ面になるか答える問題.
この裏返し回数は, N枚のコインの初期状態がどうであろうと成り立たなければならない.

例えば, 3枚のコインA,B,Cがあったときは, 答えは2となる.
初期状態が全て同じ面だった場合,
A:表, B:表, C:表
↓(1回)
A:裏, B:表, C:表
↓(2回)
A:表, B:表, C:表


1枚だけ違う面だった場合,
A:表, B:裏, C:裏
↓(1回)
A:表, B:表, C:裏
↓(2回)
A:表, B:表, C:表

といった感じ.

アルゴリズム

偶数の場合は, 絶対にNo solutionです.
コインが全部表向きのときは, 必ず偶数回裏返えします.
しかし, 奇数個が表で残りが裏の場合, 必ず奇数回裏返さなくてはならないため, no solutionです.

奇数の場合は, ただ単に N-1 を出力しておけばいいです.

プログラム

int main(void){
  int n;

  while(scanf("%d",&n),n){
    if(n % 2 == 0){
      printf("No Solution!\n");
    }
    else{
      printf("%d\n",n-1);
    }
  }
}