本文主要是介绍SSL-ZYC 游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目大意:
有一堆黄金,King和MaoLaoDa轮流拿走其中的一些,每次拿走的只能是2^n(n为正整数)个黄金,若MaoLaoDa先拿,他有必胜的方法吗?(两人都用最优方案)
思路:
这道题一开始真的是没思路。。。。。。
于是就开始打标。。。
黄金总数 胜者 第一次最少拿的黄金数
1 MaoLaoDa 1
2 MaoLaoDa 2
3 King ——
4 MaoLaoDa 1
5 MaoLaoDa 2
6 King ——
7 MaoLaoDa 1
8 MaoLaoDa 2
9 King ——
突然间我发现了什么。。。
这道题其实是找规律题!
若n%3==0 则King赢,否则MaoLaoDa赢,而MaoLaoDa一开始要拿n%3的金块!
但是由于n很大(0题目大意:
有一堆黄金,King和MaoLaoDa轮流拿走其中的一些,每次拿走的只能是2^n(n为正整数)个黄金,若MaoLaoDa先拿,他有必胜的方法吗?(两人都用最优方案)
思路:
这道题一开始真的是没思路。。。。。。
于是就开始打标。。。
黄金总数 胜者 第一次最少拿的黄金数
1 MaoLaoDa 1
2 MaoLaoDa 2
3 King ——
4 MaoLaoDa 1
5 MaoLaoDa 2
6 King ——
7 MaoLaoDa 1
8 MaoLaoDa 2
9 King ——
突然间我发现了什么。。。
这道题其实是找规律题!
若n%3==0 则King赢,否则MaoLaoDa赢,而MaoLaoDa一开始要拿n%3的金块!
但是由于n很大(n<10^1000002),所以我们要求出n的数根,再来判断n是否是3的倍数。
代码:
#include <string>
#include <cstdio>
#include <iostream>
using namespace std;
string s;
int sum;int main()
{freopen("atlantis.in","r",stdin);freopen("atlantis.out","w",stdout);for (int i=1;i<=3;i++){sum=0;cin>>s;for (int j=0;j<s.size();j++)sum+=s[j]-48; //求数根sum%=3; //判断是否是3的倍数if (sum==0) printf("King will win.\n");else{printf("MaoLaoDa will win.\n%d\n",sum);}}return 0;
}
这篇关于SSL-ZYC 游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!