博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
盒子取球C语言 蓝桥杯
阅读量:6697 次
发布时间:2019-06-25

本文共 828 字,大约阅读时间需要 2 分钟。

盒子取球方法二今盒子里有 n 个小球,A、B 两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,

也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。

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

A 先取球,然后双方交替取球,直到取完。被迫拿到最后一个球的一方为负方(输方)请编程确定出在双方都

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

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

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

分析:当 n==1 时,A一定会输,当n等于3,5时A也会输,n为2,4,8时A必定会赢,由此分析当 n 为 1+

[1,3,7,8]时,A可以取[1,3,7,8]得一个数,然后将1留给B,也就是说,有些必输得数谁取到谁就会输。当 n为一个必输

的值加上[1,3,4,8]时A比赢。

代码如下:

#include<stdio.h>

void fun(int *a)
{
 int b[]={1,3,7,8};
 int i;
 for(i=1;i+8<=1000;i++)//注意此处i的取值,
 {
  if(a[i]==0)
  {
     for(int j=0;j<=3;j++)//根据必输的值找出必赢的值
     a[i+b[j]]=1;
  }
 }
}
int main()
{
 int a[1001]={0};
 int n,m;

scanf("%d",&n);

 fun(a);
 while(n--)

{

  scanf("%d",&m);

printf("%d\n",a[m]);

}

 return 0;

}

转载于:https://www.cnblogs.com/cong12586/p/10574130.html

你可能感兴趣的文章
【运动快乐】享受赤脚慢跑 收获健康快乐
查看>>
datetime-时间日期模块
查看>>
Vmware vSphere 十个疑难问题解决方法
查看>>
实战演示 bacula 软件备份功能
查看>>
学习具体计划书
查看>>
es Update API
查看>>
MR作业的提交监控、输入输出控制及特性使用
查看>>
Cisco堆叠配置步骤+链路聚合实例
查看>>
Docker storage driver 选择
查看>>
如果在docker中部署tomcat,并且部署java应用程序
查看>>
高并发系统之降级特技
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
windows 小技巧
查看>>
mysql 表锁-解锁
查看>>
MySQL索引
查看>>
java cxf实现webservice接口方式之不依赖spring
查看>>
Jsoup遍历ul li下的链接信息实例
查看>>
cobbler get-loaders 通过代理下载
查看>>
Memcache应用场景
查看>>