| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1057 人关注过本帖
标题:人机对战算法
取消只看楼主 加入收藏
simpley
Rank: 1
等 级:新手上路
帖 子:262
专家分:0
注 册:2005-2-23
收藏
 问题点数:0 回复次数:4 
人机对战算法
这是电脑报上的一题:
有个25棋子,两人轮流拿,一次最多拿3个,拿完后,谁得到的棋子总数为偶数的胜.找出必胜策略,实现人机对战.让电脑必能取胜.

算法很简单,但要找到不容易,至少我是这样.
搜索更多相关主题的帖子: 人机 算法 
2005-11-28 13:24
simpley
Rank: 1
等 级:新手上路
帖 子:262
专家分:0
注 册:2005-2-23
收藏
得分:0 
描述非常准确.
提示:后拿者必胜.

myQQ::445750010
2005-12-01 17:58
simpley
Rank: 1
等 级:新手上路
帖 子:262
专家分:0
注 册:2005-2-23
收藏
得分:0 
规则和楼主的有些出入,不过思想差不多。?
规则不一样,思想也完全不一样.

yuki的程序可以这么做;
任意一个数n,正确的拿走数就是:
n-pow(2,n的位数)+1

计算n的位数我只知道这么做,不知道有没有好办法
for(i=14;;i--)
if(n>>i)break;

#include<math.h>
main(){int n,i;
scanf("%d",&n);
for(i=14;;i--)
if(n>>i)break;
printf("%f",n-pow(2,i)+1);getch();}


myQQ::445750010
2005-12-05 14:31
simpley
Rank: 1
等 级:新手上路
帖 子:262
专家分:0
注 册:2005-2-23
收藏
得分:0 

说明:
上面我写的那个程序只是一种算法演示,不包括容错处理.比如,你输入7后,会打出4,这就违反规定,这说明你遇到7时是必败的.即如果有7个数,谁先拿谁败.yuki的程序按照正常的思路很容易推出,而电脑报的题相对来说思路就要灵活一些.


myQQ::445750010
2005-12-05 14:41
simpley
Rank: 1
等 级:新手上路
帖 子:262
专家分:0
注 册:2005-2-23
收藏
得分:0 
我觉得如果把楼上的游戏改为相反的就有趣多了.
游戏说明: 捡石头,玩家一次最多只能取走总数一半的石头,谁拿到最后一块石头,他就胜了.

任意一个数N,要必胜就必须拿走下面程序中得出的数.
main(){int i=14,n;
scanf("%d",&n);n++;
while(!(n>>i--));
if((n>>i)==2)i--;
printf("%d",n-(3<<i));getch();
}
如果打出0,就说明必败.(这时数为3*2^k-1形式.)

myQQ::445750010
2005-12-08 13:33
快速回复:人机对战算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017252 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved