注册 登录
编程论坛 C++教室

C语言编程

心灵百合 发布于 2011-09-11 20:01, 319 次点击
现有21根火柴,两人轮流取,每人每次可取走1- 4根,不可多取,也不能不取,谁取最后一根火柴则谁输。请编写一个程序进行人机对弈,要求人先取,计算机后取;计算机一方为“常胜将军”。
5 回复
#2
czsbc2011-09-11 20:36
看错了,原来是取最后一根的输

那先取的就必败了

[ 本帖最后由 czsbc 于 2011-9-11 21:12 编辑 ]
#3
czsbc2011-09-11 21:21
程序代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int total=21,p;
    while(total!=1)
    {
        printf("请输入您要取的数目(1-4):");
        scanf("%d",&p);
        if(p<1||p>4)
        {
            printf("输入有误!!");
            system("pause");
            continue;
        }
        total-=p;
        printf("good!\n现在还剩火柴数:%d\n",total);
        system("pause");
        system("cls");
        total-=5-p;
        printf("现在机器取了 %d 根\n还剩火柴数:%d\n请继续\n",5-p,total);
    }
    printf("现在,你只有最后一根了。\nOh!,你输了^-^\n");
    return 1;
}
#4
guilin08222011-10-01 22:08
代码我没写,不过,算法我倒有一个。首先分析可知:能拿到第20根的人,一定是胜者;其次,每次一个人只能拿1到4根,也就是说,每轮都能保证能拿5根(这一点很重要),思想就是,他拿最多,你就拿最少。
由上两点可以得到,后者每次要拿的火柴数是前者数的和为5,就可以了。
#5
lijunbo2011-10-05 21:59
我才学c++,不太懂,以下是我编的程序。
很垃圾的
我不明白我的程序为什么一旦输入字母,就一直循环下去呢??(输入数字都是好的)
我用的循环语句有错吗??for(b<1||b>4;b<1||b>4;cin>>b)
请高手解答!!!!
(编译环境vs2010)
#include<iostream>
using namespace std;
int main()

{
    for(int a=21;a!=1;a=a-5 ){

int b;
cout<<"请输入您要取得的数目(1-4)"<<endl;
cin>>b;
for(b<1||b>4;b<1||b>4;cin>>b)
{
cout<<"输入错误,请重新输入!!"<<endl;

}
cout<<"很好!!您取了"<<b<<"根火柴!"<<endl<<"现在还剩下"<<a-b<<"根火柴."<<endl<<"计算机取了"<<5-b<<"根火柴!!"<<endl<<"现在还剩下的火柴为"<<a-5<<endl;

    }
    cout<<endl<<endl<<endl<<"啊啊!!!最后一根火柴看来非你莫属了!!"<<endl<<"YOU  LOSE!!!"<<endl;
    }
#6
心灵百合2011-10-17 10:45
回复 5楼 lijunbo
谢谢!
1