不连续取球(取球博弈)

今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。

我们约定:

每个人从盒子中取出的球的数目必须是:1,3,7或者8个。

轮到某一方取球时不能弃权!

A先取球,然后双方交替取球,直到取完。

被迫拿到最后一个球的一方为负方(输方)

请编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A是否能赢?

程序运行时,从标准输入获得数据,其格式如下:

先是一个整数n(n<100),表示接下来有n个整数。然后是n个整数,每个占一行(整数<10000),表示初始球数。

程序则输出n行,表示A的输赢情况(输为0,赢为1)。

例如,用户输入:

10

18

则程序应该输出:

0

1

1

0

思路:

这道题可以用打表法,因为题目中的数值较大。

代码如下:

#include<stdio.h>
#include<string.h>
int a[10010];
int main()
{
	int n,i,j,m;
	memset(a,0,sizeof(a));
	int b[4]={1,3,7,8};
	for(i=1;i<10010;i++)//从一开始 因为取最后一个球的时候,就为输者。
	{
		if(a[i]==0)
		{
			for(j=0;j<4;j++)
			a[i+b[j]]=1;//距离该点为1,3,7,8的点均赋值为1
		}
	}
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d",&m);
		printf("%d\n",a[m]);
	}
	return 0;
} 

不连续取球(取球博弈)

时间: 2024-10-16 20:22:16

不连续取球(取球博弈)的相关文章

试题系列四(袋中有6红球 3黄球 3绿球,从中取6个球,求所有拿到球的颜色的可能 c(12,6))

1.袋中有6红球 3黄球 3绿球,从中取6个球,求所有拿到球的颜色的可能 c(12,6) 1 #include<stdio.h> 2 3 int main(int argc, char** argv) 4 { 5 int red = 6; 6 int yellow = 3; 7 int green = 3; 8 int i = 0; 9 int j = 0; 10 11 for ( i = 0; i <= yellow; i++) 12 { 13 for (j = 0; j <=

hdu 2516 取石子游戏 Fibonacci博弈 入门题

取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3069    Accepted Submission(s): 1784 Problem Description 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍.取完者胜.先取者负输出"Second win&q

hdu 2516 取石子游戏 (Fibonacci博弈)

取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8159    Accepted Submission(s): 4950 Problem Description 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍.取完者胜.先取者负输出"Second win&qu

黑球白球

<span style="font-family: 微软雅黑, 宋体, Arial; font-size: 12px; background-color: rgb(255, 255, 255);">一个袋子里有两种颜色的球,黑色和白色,你每次从中取出两个球,如果是同色的,则在袋子里放一个白球,否则放回一个黑球.</span> 最后袋子里剩下一个球,你能最后判断球的颜色么? 输入格式: 多组测试数据,每组数据一行,有两个数.W和B. (0<=W,B<=

用“道”的思想解决费用流问题---取/不取皆是取 (有下界-&gt;有上界) / ACdreamoj 1171

题意: 给一个矩阵,给出约束:i(0<i<n)行至少去ai个数,j行至少取bi个数,要求取的数值之和最小. 开始一见,就直接建了二分图,但是,发现这是有下界无上界最小费用流问题,肿么办...问题转化:所谓正难则反!现在某行/列要至少取k个,总和最小,不就是那行/列最多留下K个,使留下的和最大?其实也就是最多取k个,使值最大,转化为下界为0,有上界的最大费用问题(普通问题)."取","不取",本质都是一样的,正是"无为"的思想!取,则最

关于laravel 用paginate()取值取不到的问题

前几天在写api的时候,出现了一个比较奇怪的问题,用paginate()方法取值取不到的问题,我奇怪的是,我用paginate()方法取值是直接复制粘贴之前自己写过的api中的代码的,怎么突然取不到了呢? 代码如下: $user = JWTAuth::parseToken()->authenticate();$status = $request->input('status');$appeal = Appeal::select('id','created_at','area','spread_

UVA - 11029Leading and Trailing(快速幂取模取后三位 + log10()取前三位)

题目: UVA - 11029Leading and Trailing(快速幂取模取后三位 + log10()取前三位) 题目大意:给你N的k次方,然后要求你求出这个数的前三位和后三位. 解题思路:因为n和k都很大,这个数求出来是大数,所以可以用快速幂取模求后三位,因为后面的三位和前面的位数的没有关系.前面的三位比较难办.设x = log (n^k)  = k * log10(n),那么10^x = k * log10(n).将X = a(整数) + b(小数),整数部分10^a只是移动小数点,

C 逻辑运算, 移位运算 , 取整 , 取模(取余)

一. 按位运算 (快速操作数据的某个位) ^   按位异或 ~  按位取反 &  按位与 |  按位或 二. 逻辑运算 &&  逻辑与   有一个值为 0 ,值为 0 ||    逻辑或    有一个值为 1 ,值为 1 !     逻辑非    真值逻辑非为假 , 假值逻辑非为真 三. 移位操作 <<    左移      有符号无符号数低位 都补 0 >>    右移      有符号数高位补 1 , 无符号数高位补 0 四. 除法运算(整数)  可以求

梦工厂实验室 取石子之fans 博弈

问题 D: 取石子之fans 时间限制: 1 Sec  内存限制: 64 MB提交: 57  解决: 26[提交][状态][讨论版] 题目描述 Yougth和Hrdv玩一个游戏,拿出n个石子摆成一圈,Yougth和Hrdv分别从其中取石子,谁先取完者胜,每次可以从中取一个或者相邻两个(注意不是“两个”而是“相邻两个”),Yougth先取,两个人足够聪明,不会拿错.输出胜利者的名字. 输入 输入包括多组测试数据.每组测试数据一个正整数n,数据保证int范围内. 输出 输出胜利者的名字. 样例输入

[python]初试页面抓取——抓取沪深股市交易龙虎榜数据

[python]抓取沪深股市交易龙虎榜数据 python 3.5.0下运行 没做自动建立files文件夹,需要手动在py文件目录下建立files文件夹后运行 #coding=utf-8 import gzipimport http.cookiejar import urllib.request import urllib.parse import json import os import time import datetime def getOpener(head): # deal with