第五届在线编程大赛月赛第三题:石子游戏
Posted HarryFish
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五届在线编程大赛月赛第三题:石子游戏相关的知识,希望对你有一定的参考价值。
题目详情
甲乙两人面对若干堆石子,其中每一堆石子的数目可以任意确定。
两人轮流按下列规则取走一些石子,游戏的规则如下:
1.每一步应取走至少一枚石子;
2.每一步只能从某一堆中取走部分或全部石子;
3.如果谁无法按规则取子,谁就是输家。
如果甲乙两人都采取最优的策略,甲先拿,请问,是甲必胜还是乙必胜.
输入格式:
多组数据,每组数据两行,第一行是一个整数N, 2<=N<=10000
下一行是N个正整数,代表每堆的石子数,石子数在32位整数内。
输出格式:
每组测试数据输出一行,如果甲存在必胜策略,输出"Win",否则输出"Lost"
答题说明输入样例
3
3 3 1
输出样例:
Win
第一种方法主要是找规律:#include<stdio.h>
int shiziyouxi(int a[],int n);
int main()
int i,a[10000],n;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
shiziyouxi(a,n);
return 0;
int shiziyouxi(int a[],int n)
int num_all=0;
int num_1=0;
int i;
for(i=1;i<=n;i++)
num_all++;
if(a[i]!=1)
num_1++;
if(n%2==0&&num_1%2==0)
printf("Lost");
else
printf("Win");
第二种方法主要用了
Enockipp 的代码详见:
#include<iostream>
int main(int argc,char**argv)
int N=0;
while(std::cin>>N)
int ret=0;
int temp=0;
for(int i=0;i<N;++i)
std:: cin>>temp;
ret^=temp;
if(ret!=0)
std:: cout<<"Win"<<std::endl;
else
std:: cout<<"Lost"<<std::endl;
return 0;
以上是关于第五届在线编程大赛月赛第三题:石子游戏的主要内容,如果未能解决你的问题,请参考以下文章