蓝桥杯 取球游戏

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

每个人从盒子中取出的球的数目必须是:1,3,7或者8个。 轮到某一方取球时不能弃权!

A先取球,然后双方交替取球,直到取完。 被迫拿到最后一个球的一方为负方(输方)

请编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A是否能赢? 程序运行时,从标准输入获得数据,其格式如下:

先是一个整数n(n<100),表示接下来有n个整数。然后是n个整数,每个占一行(整数<10000),表示初始球数。 程序则输出n行,表示A的输赢情况(输为0,赢为1)。 例如,用户输入: 4 1 2 10 18

则程序应该输出: 0 1 1 0

思路分析:A先取球,那么假设盒子里面有n个球的时候A赢,即轮到A取的时候盒子里面球的个数为0。那么,当盒子里面多1、3、7、8个球的时候,A就会输。因此,有n个球时候,A的输赢情况,与i-1,i-3,i-7,i-8的时候是相反的。

package ccq.lanqiao;

import java.util.*;

public class Main{
	public static void main(String[] args){
		boolean array[]=new boolean[10020];
		array[0]=true;
		for(int i=1;i<10020;i++){
			array[i]=(i>=1&&!array[i-1])||(i>=3&&!array[i-3])||(i>=7&&!array[i-7])||(i>=8&&!array[i-8]);
		}

		Scanner s=new Scanner(System.in);
		int n=s.nextInt();
		int total=0,result=0;
		Vector<Integer> temp=new Vector<Integer>();
		s.nextLine();
		for(int i=0;i<n;i++){
			total=s.nextInt();
			result=array[total]?1:0;
			temp.add(result);
		}

		for(int i=0;i<temp.size();i++){
			System.out.println(temp.elementAt(i));
		}
	}
}
时间: 2024-07-29 19:40:53

蓝桥杯 取球游戏的相关文章

bzoj-4204 取球游戏

题意: 给出1到n的标号和m个球,每次随机取一个球,将其标号+1之后放回: 如果取出的标号是n就置为1,求执行k次操作之后每种球的期望个数: n<=1000,m<=10000000,k<=max int: 题解: 设f[t][i]为第t次操作时,标号为i的球的期望个数: 那么很容易列出转移方程: f[t][i]=f[t-1][i]+1/m*f[t-1][i-1]-1/m*f[t-1][i]: (边界i==1时同理) 这个状态显然是开不下的,但是可以考虑矩阵乘法优化: 得到一个形似这样的矩

蓝桥杯 -- 取字母

从键盘读入一个由字母构成的串(不大于30个字符). 从该串中取出3个不重复的字符,求所有的取法. 取出的字符,要求按字母升序排列成一个串. 不同的取法输出顺序可以不考虑. 例如: 输入: abc 则输出: abc 输入: abcd 则输出: abc abd acd bcd 输入: abcaa 则输出: abc 要求考生把所有类写在一个文件中. 调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可. 相关的工程文件不要拷入.请不要使用package语句. 另外,源程序中只能出现JDK1.5

BZOJ 4204 取球游戏 循环矩阵优化期望递推

题意:链接 方法:循环矩阵优化期望递推. 解析: 这题递推没啥,主要是循环矩阵优化 我们发现,如果直接上矩阵优化的话是n^3log,所以铁定是过不了了的,然后再观察一下这道题我们要求幂的矩阵,发现他是这种形式 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 1 每一行都是上一行向右窜了一位 所以我们可以用一个一维数组代表这个循环矩阵 并且循环矩阵求和,乘积还是循环矩阵 所以我们就可以用循环矩阵来优化掉一个n 复杂度即变为了n^2log 可过. 代码

蓝桥杯.取字符(去掉重复的使用set list实现)

题目描述: 从键盘读入一个由字母构成的串(不大于30个字符). 从该串中取出3个不重复的字符,求所有的取法. 取出的字符,要求按字母升序排列成一个串. 不同的取法输出顺序可以不考虑. 例如: 输入: abc 则输出: abc 输入: abcd 则输出: abc abd acd bcd 输入: abcaa 则输出: abc package ccf; import java.util.ArrayList; import java.util.HashSet; import java.util.Link

纸牌游戏----蓝桥杯(暴力方法)

蓝桥杯的纸牌游戏,这里我只用了简单的暴力,很费事,其实可以用递归, DP等等来写. 代码: #include <iostream> #include <cstdio> using namespace std; int main() { int a[13]; static int count; int ans = 0; for(a[0]=0; a[0]<=4; a[0]++) { for(a[1]=0; a[1]<=4; a[1]++) { for(a[2]=0; a[2

第三届蓝桥杯 c/c++真题

第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多循环的只是,还有模拟,动态规划的只是. 其中做题过程中,也有了一些新的体会.起初做代码填空题的时候我没办法知道自己做的是对还是错,就跑到网上查答案,后来发现,题目已经给出了代码,起始我们可以自己加上头文件,然后把空缺的代码加上进行调试的,这样就可以验证自己补充的代码是否正确了. 此外在进行调试的时候

蓝桥杯——说好的进阶之取数博弈游戏(动态规划实现)

今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断. 我们约定: 每个人从盒子中取出的球的数目必须是:1,3,7或者8个. 轮到某一方取球时不能弃权! A先取球,然后双方交替取球,直到取完. 被迫拿到最后一个球的一方为负方(输方) 请编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A是否能赢? 程序运行时,从标准输入获得数据,其格式如下: 先是一个整数n(n<100),表示接下来有n个整数.

蓝桥杯 地宫取宝(12&#39;)

X 国王有一个地宫宝库.是n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大, 小明就可以拿起它(当然,也可以不拿). 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明. 请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝. [数据格式] 输入一行 3个整数,用空格分开:n m

蓝桥杯:地宫取宝

*/--> pre.src {background-color: Black; color: White;} 蓝桥杯:地宫取宝 Table of Contents 错误的写法 改进后 再次改进 用记忆的方法去改进 标题:地宫取宝 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起