2011-06-16 18:02:05Morris
d347. 847 - A Multiplication Game
http://zerojudge.tw/ShowProblem?problemid=d347
內容 :
Stan
和Ollie在玩一個乘法的遊戲。他們輪流對一個正整數 p
乘上2到9中的一個數。遊戲開始時,p=1且由Stan先開始。Stan乘完後換Ollie乘,然後再換Stan乘,如此一直下去。遊戲一開始時他們也訂
了一個整數 n (1 < n < 4294967295),誰先乘上一個2到9的數,使得 p>= n,他就是遊戲的贏家。
輸入說明
:
每組測試資料一列,含有1個整數 n。
輸出說明
:
每組測試資料輸出一列,輸出贏家是誰。
你應該要假設這兩個人都是很厲害的玩家(就是說,如果可以贏的話,絕對不會有失誤)。
範例輸入 :
3 38 168 162 17 34012226
範例輸出 :
Stan wins. Stan wins. Ollie wins. Stan wins. Ollie wins. Stan wins.
提示
:
luckycat譯
出處
:
UVA 847
(管理:asas)
/**********************************************************************************/
/* Problem: d347 "847 - A Multiplication Game" from UVA 847 */
/* Language: C */
/* Result: AC (20ms, 232KB) on ZeroJudge */
/* Author: morris1028 at 2011-06-15 18:06:18 */
/**********************************************************************************/
#include<stdio.h>
main() {
long long n, p, i;
while(scanf("%lld", &n) == 1) {
p = 1, i = 1;
while(1) {
if(i&1) p *= 9;
else p *= 2;
if(p >= n) {
if(i&1)
puts("Stan wins.");
else
puts("Ollie wins.");
break;
}
i++;
}
}
return 0;
}
/*
這題的解法就是在 n = 1 - 9 時為史丹贏、n = 10 - 18 為歐力贏、
n = 19 - 162 為史丹贏、n = 163 - 324 為歐力贏....。
也就是說,當史丹決定乘數時,p 用 9 乘,看它有沒有大於 n,
如果有大於 n,就是史丹贏;當為歐力決定乘數時,p 用 2 乘,
看它有沒有大於 n,如果有大於 n,就是歐力贏。
*/