Problem E: A multiplication game
时间: 1ms 内存:128M
描述:
Problem E: A multiplication game
Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbers 2 to 9. Stan always starts with p = 1, does his multiplication, then Ollie multiplies the number, then Stan and so on. Before a game starts, they draw an integer 1 < n < 4294967295 and the winner is who first reaches p >= n. Each line of input contains one integer number n. For each line of input output one line either
Stan wins.or
Ollie wins.assuming that both of them play perfectly.
输入:
输出:
示例输入:
162
17
34012226
示例输出:
Stan wins.
Ollie wins.
Stan wins.
提示:
参考答案(内存最优[748]):
#include <stdio.h>
#include <assert.h>
int main () {
unsigned int W, l ,h, n;
while (scanf("%u",&n)==1) {
assert(1 < n && n < 4294967295U);
W = 1;
l = n/9; if (l*9<n) l++; h = n-1;
while (1) {
if (l <= 1 && 1 <= h) {
printf(W?"Stan wins.\n":"Ollie wins.\n");
break;
}
if (W) {
if (l/2*2 < l) l = l/2+1; else l/=2;
h/=9;
W=0;
} else {
if (l/9*9 < l) l = l/9+1; else l/=9;
h/=2;
W=1;
}
}
}
return 0;
}
参考答案(时间最优[1]):
#include <stdio.h>
#include <assert.h>
int main () {
unsigned int W, l ,h, n;
while (scanf("%u",&n)==1) {
assert(1 < n && n < 4294967295U);
W = 1;
l = n/9; if (l*9<n) l++; h = n-1;
while (1) {
if (l <= 1 && 1 <= h) {
printf(W?"Stan wins.\n":"Ollie wins.\n");
break;
}
if (W) {
if (l/2*2 < l) l = l/2+1; else l/=2;
h/=9;
W=0;
} else {
if (l/9*9 < l) l = l/9+1; else l/=9;
h/=2;
W=1;
}
}
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。