标签:timus 1180. stone game 游戏题目
| input | output |
|---|---|
8 |
1 2 |
这也是个有趣的问题,也很经典的游戏题目的变形了。
不过这道题扩展了成为无限大的数了。
类似的游戏有:没人可以拿掉桌面上的棋子,每次不能超过5个,最后没棋子可以拿的算输
解决这样的题目只能是寻找规律了,不能真的模拟区玩了,否则必定超时。
这道题目的规律就是:
1 如果给出的stone是3的倍数,那么先取者必输
2 如果给出的不是3的倍数,那么先取者就凑成3的倍数就必赢,因为凑3的倍数很容易,去掉1个或者2个必定可以凑出来了
所以最后问题就成了mod3问题了。
我是怎么想出来的?
我是一个列子一个例子去观察,最后得出结论的,然后验证,AC,结论正确。
也挺花时间的。
#include <string>
#include <iostream>
using namespace std;
int StoneGameMod3(string &s)
{
int carry = 0;
for (int i = 0; i < s.size(); i++)
{
int a = carry * 10 + s[i] - ‘0‘;
carry = a % 3;
}
return carry;
}
void StoneGame1180()
{
string s;
cin>>s;
int mod3 = StoneGameMod3(s);
if (0 == mod3) cout<<2;
else cout<<1<<endl<<mod3;
}
int main()
{
StoneGame1180();
return 0;
}
标签:timus 1180. stone game 游戏题目
原文地址:http://blog.csdn.net/kenden23/article/details/24619077