| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 892 人关注过本帖
标题:求教高手一道题
取消只看楼主 加入收藏
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
结帖率:79.37%
收藏
已结贴  问题点数:20 回复次数:3 
求教高手一道题
/*
问题描述: ( 取棋子 ) 设有N颗棋子,由人和计算机轮流从中取走若干颗。每方每次最
 多取K颗,最少取1颗 (K值不能超过总数的一半,也不能小于1)。试编写一程
 序使计算机有较多的获胜机会。

    屏幕输入提示:

    (1) 输入竞赛规则:A. 取最后一颗棋子的那一方为败.
                      B. 取最后一颗棋子的那一方为胜.
    (2) 总共有多少颗棋子?
    (3) 一次最多取几颗?
    (4) 谁先取?
    (5) 每个回合都应显示: A. 你取几颗?
                          B. 我取走......颗,还剩......颗.
    (6) 竞赛过程中发生违例时,打印出:  竞赛无法进行下去!
    (7) 竞赛结束后打印:
    I win!(我胜!)或  You win!(你胜!)。
*/
此题确实有点难,现在还没有思路,请各位高手解答!
搜索更多相关主题的帖子: 计算机 
2010-08-27 09:44
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
御坂,这题有详细代码放上来吗?主要是计算机的那个函数没有思路,望高手指点

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-08-27 10:01
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
回复 5楼 succubus
是否能将详细代码写出来?

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-08-27 18:22
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
已经将代码写出,并且做了优化
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int num=0,k=0,pri,surplus,take1,take2;//num为棋子数量,k为一次取多少颗,pri表示谁先取,surplus为剩下棋子
void wingame()                        //take1和take2分别为人取走的和计算机取走的.
{
system("cls");//先清屏一下
while(1)
{
if(pri==1)
{
    printf("你取几颗:\n");
    scanf("%d",&take1);
    if(take1<1)
    {
       printf("取颗数错误!\n");
       getchar();
       exit(0);
    }
    if(take1>k)
    {
        printf("竞赛无法进行下去!\n");
        getchar();
        exit(0);
    }
    surplus=surplus-take1;
    if(surplus>=0)
    {
        printf("你赢了,请按任意键结束游戏....\n");
        getchar();
        exit(0);
    }
    printf("你取走%d颗,还剩%d颗\n",take1,surplus);
    take1=0;//将取走清零
    pri=2;//优先级变成计算机的
}
if(pri==2)
{
    int judge=num;
    judge=(surplus%(k+1));
    if(surplus==0)
    {
        printf("计算机赢了,不要灰心,请按任意键结束游戏....\n");
        getchar();
        exit(0);
    }
    if(judge!=0)
    {
    take2=judge;
    if(take2<1)
    {
        printf("计算机认输!你赢了,请按任意键结束游戏....\n");
        getchar();
        exit(0);
    }
    surplus=surplus-take2;
    printf("计算机取走%d颗,还剩%d颗\n",take2,surplus);
    take2=0;//将take2清零
    pri=1;//优先级变为用户的
    }
    if(judge==0)
    {
    surplus=surplus-1;
    printf("计算机取走%d颗,还剩%d颗\n",take2,surplus);
    take2=0;
    pri=2;
    }
}
}
}
void main()
{
    int key;
    printf("请输入一共有多少颗棋子:\n");
    scanf("%d",&num);
    surplus=num;//surplus为剩下棋子
    printf("一次最多取多少颗:\n");
    scanf("%d",&k);
     printf("谁先取 1为你先取,2为计算机先取:\n");
    scanf("%d",&pri);
    printf("竞赛规则:\n");
    printf("1.取到最后一颗棋子的一方为胜\n");
    printf("2.取到最后一个棋子的一方为败(暂未开放)\n");
    printf("请选择:\n");
    scanf("%d",&key);
    switch(key)
    {
    case 1:wingame();break;
  //case 2:losegame();break; 先写了一个,所以losegame没写
    default:exit(0);break;
    }
}


欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-08-28 11:05
快速回复:求教高手一道题
数据加载中...
 
   



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

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