| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 892 人关注过本帖
标题:求教高手一道题
只看楼主 加入收藏
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
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
以下是引用sunyh1999在2010-8-28 11:05:04的发言:

已经将代码写出,并且做了优化#include  
#include  
#include  
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;
    }
}
佩服BZ  请问BZ是不是程序员?

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-08-28 11:50
linfeng1712
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2008-10-26
收藏
得分:0 
这道题好像是深信服的一道笔试题。
2010-08-30 10:02
tangdesai
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-9-1
收藏
得分:0 
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
void game(int & totle,char & rule,bool & firster);
int main()
{
    int totle;
    bool firster;
    char rule;
    cout<<"请输入竞赛规则: A. 取最后一颗棋子的那一方为败.\tB. 取最后一颗棋子的那一方为胜.\n";
    cin>>rule;
    cout<<"总共的棋子:\n";
    cin>>totle;
    cout<<"谁先取\n";
    cin>>firster;
    game(totle,rule,firster);
    return 0;
}
void game(int & totle,char & rule,bool & firster)
{
    int a,b,m;
    srand(100*(unsigned)time(NULL));
    m=(float)totle*rand()/(RAND_MAX+1);
        cout<<"比赛开始...\n";
        if(firster=true)
        {
            cout<<"由您先拿棋子..请输入要拿的棋子数:";
            cin>>a;
            cout<<endl;
            totle-=a;
            while(totle>0)
            {
                m=(float)totle*rand()/(RAND_MAX+1);
                if(totle>0)
                {
                cout<<"电脑拿走的棋子数:"<<m<<endl;
                totle-=m;
                }
                if(totle<=0) {
                    if(rule='A')
                    {
                    cout<<"I win..."<<endl;
                    cout<<"比赛结束...."<<endl;
                    break;
                    }
                    if(rule='B')
                    {
                    cout<<"You win..."<<endl;
                    cout<<"比赛结束...."<<endl;
                    break;
                    }
                }
                if(totle>0)
                {
                cout<<"您拿走的棋子数:";
                cin>>b;
                totle-=b;
                }
                if(totle<=0) {
                    if(rule='A')
                    {
                    
                    cout<<"You win..."<<endl;
                    cout<<"比赛结束...."<<endl;
                    break;
                    }
                    if(rule='B')
                    {
                    
                    cout<<"I win..."<<endl;
                    cout<<"比赛结束...."<<endl;
                    break;
                    }
                }
            }
        }
        if(firster=false)
        {
            cout<<"由电脑先拿棋子..电脑拿走的棋子数:"<<m<<endl;
            totle-=m;
            while(totle>0)
            {
                m=(float)totle*rand()/(RAND_MAX+1);
                if(totle>0)
                {
                cout<<"您拿走的棋子数:";
                cin>>a;
                totle-=a;
                }
                if(totle<=0) {
                    if(rule='A')
                    {
                    
                    cout<<"You win..."<<endl;
                    cout<<"比赛结束...."<<endl;
                    break;
                    }
                    if(rule='B')
                    {
                    
                    cout<<"I win..."<<endl;
                    cout<<"比赛结束...."<<endl;
                    break;
                    }
                }
                if(totle>0)
                {
                cout<<"电脑拿走的棋子数:"<<m<<endl;
                totle-=m;
                }
                if(totle<=0) {
                    if(rule='A')
                    {
                    
                    cout<<"I win..."<<endl;
                    cout<<"比赛结束...."<<endl;
                    break;
                    }
                    if(rule='B')
                    {
                    
                    cout<<"You win..."<<endl;
                    cout<<"比赛结束...."<<endl;
                    break;}
                }
            }
        }
}
2010-09-01 11:43
快速回复:求教高手一道题
数据加载中...
 
   



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

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