问题描述:

今盒子里有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

分析:

当n=1的时候,A一定会输;

当n=1+[1,3,7,8]的时候,A一定会赢,因为A可以取1,3,7,8对应的那个数,然后把1留给B;

也就是说,当n的值是一个必输的情况加1,3,7,8的时候,则A可以取到对应的值,而把必输情况交给B。

我们根据这条规律,把n的所有取值1~10000都进行标记为1(必胜)或者0(必输),然后对输出对应的标记即可。

#include<iostream>
using namespace std;
void fun(int *a)
{int b[]={1,3,7,8};for(int i=1;i+8<10000;i++){if(a[i]==0)     //必败局势 {for(int j=0;j<4;j++)a[i+b[j]]=1;}}
}
int main()
{int a[10001]={0};fun(a);int n,m;cin>>n;for(int i=0;i<n;i++){cin>>m;cout<<a[m]<<endl;}return 0;
}

我们将1~10000的必败局势打印出来:

void fun(int *a)
{int b[]={1,3,7,8};for(int i=1;i+8<10000;i++){if(a[i]==0)     //必败局势 {cout<<i;for(int j=0;j<4;j++)a[i+b[j]]=1;}else cout<<" ";}
}

我们可以发现,所有的必败局势都是在1,3,5,7的基础上加15的倍数得到的,至于为什么是15,我一直也没想明白。

在这个结论的基础上,可以对代码进行简化:

#include<iostream>
using namespace std;
int main()
{int n,m,t;cin>>n;while(n--){cin>>m;t = m%15;if(t==1||t==3||t==5||t==7)cout<<0<<endl;else cout<<1<<endl;}return 0;
}

转载于:https://www.cnblogs.com/zhezh/p/3773326.html

2012蓝桥杯【初赛试题】 取球游戏相关推荐

  1. 2012蓝桥杯C++本科 取球游戏

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

  2. 蓝桥杯 历届试题 填字母游戏

    文章目录 问题描述 输入格式 输出格式 样例输入 样例输出 解题思路: 解题代码: 问题描述   小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的 ...

  3. Java实现蓝桥杯历届试题填字母游戏

    题目描述 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了".K大师在纸上画了一行n个格子,要小明 ...

  4. 蓝桥杯- 历届试题 填字母游戏

    传送门 问题描述 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了". K大师在纸上画了一行n个格 ...

  5. 第十二届蓝桥杯初赛试题B直线

    算法跑的时间有点慢,但是结果应该是准确的,引入字典会不会加快速度?希望大佬指点 li = [] li1 = []#我们不考虑平行直线 平行直线数目就等于m+n m, n = map(int,input ...

  6. 第三届蓝桥杯B组 C/C++取球游戏

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

  7. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  8. nyoj_518_取球游戏_201404161738

    取球游戏 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并 ...

  9. 蓝桥杯c语言试题幸运数,蓝桥杯  历届试题 幸运数  dfs

    时间限制:1.0s   内存限制:256.0MB 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成 . 首先从1开始写出自然数1,2,3,4,5,6,. ...

  10. 历届试题+九宫重排+java_蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)...

    Description 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...

最新文章

  1. Spring.net使用说明
  2. highcharts一天时间 与一周时间_如何规划自己一天的时间
  3. docker日志存放路径
  4. CentOS6安装MySQL 2 - yum makecache成功
  5. 【Python】透视表、统计表、汇总表、报表
  6. etherpad an interactive approach for combining multiple sentences from different students in class
  7. docker Failed to get D-Bus connection 报错
  8. Python turtle库实现基本剖析
  9. uoj#188. 【UR #13】Sanrd(Min_25筛)
  10. CSS 文本方向 direction属性
  11. 信息发布系统 Jquery+MVC架构开发(6)BLL层提供WCF 服务 .
  12. 经典Java入门视频教程免费下载
  13. 安全星球|盘点最新国内外网络安全资讯
  14. 《Python程序设计实验指导书》81个实验项目选做参考
  15. 一、数据挖掘—初识数据挖掘
  16. Unity3D视频教程,Unity3D从入门到精通视频教程——转
  17. 计算机组成原理pc和upc,(完整版)计算机组成原理模拟试题ABC卷.doc
  18. 算法时间复杂度lg是多少_斐波那契数的 O(lgn) 时间复杂度算法 | 学步园
  19. 怎么查看一段时间的计算机ip,如何查看电脑中使用过的历史IP地址
  20. 等保2.0正式发布了吗?核心思想包括什么?

热门文章

  1. vector容器易错知识点集锦
  2. Hadoop在master查看live nodes为0解决方案
  3. 【ECG实践篇(1)】MIT-BIH数据库数据解析的方法以及使用rdann获取人工标注注释的方法
  4. 【机器学习】主成分分析 (PCA)、无监督特征提取
  5. 【GYM-100889 C】Chunin Exam【左右手路径问题】
  6. hillstone debug 抓包
  7. java并发学习--线程池(一)
  8. PHP复习第三天-文件上传
  9. Gym 100801D Distribution in Metagonia (数学思维题)
  10. 地址栏js的写法(转载)