| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 966 人关注过本帖
标题:一个很复杂的问题,本人自已做出来了!望大家提提意见!
取消只看楼主 加入收藏
一尛星一
Rank: 2
来 自:湖北孝感
等 级:论坛游民
帖 子:41
专家分:49
注 册:2009-10-17
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:1 
一个很复杂的问题,本人自已做出来了!望大家提提意见!
本人刚学C++不久,望大家多多指教!
有三个商人和三个奴隶要过河!但只有一条船!!!每次只能坐两个人!奴隶协议,奴隶不管在哪边,如果比商人多就把商人杀掉!请问商人要怎么安排过河!(可以坐两个人,也可以做一个人,记得船要来回,别过去了就不用个人划回来)……


开始的方案有三种A.商人\
和奴隶B.商人和商人C.奴隶和奴隶,先执行B方案是绝对不行的(一边奴隶大于商人)\
那么就只剩A,B方案了,实际上A,B方案都可以!我们这里是执行A方案!商人和奴隶\
过去后当然还要把个人把船划过来,用奴隶划过来商人就死了,所以就只有商人划了\
商人过来后,就只能划两个奴隶过去了!过去后再派个奴隶把船划过来,让两个商人过\
去再划过来一个商人和一个奴隶,现在对岸有商人和奴隶各一个,这边有商人和奴隶各\
两个,接着派两个商人过去,一个奴隶划过来,在过去连个奴隶,再过来一个,在过去\
两个!大家可以拿六个物品代替的试一下!
(注:“O”代表商人!“X”代表奴隶!)


#include<iostream>
#include<string>
#include<conio.h>
void up();
void down();
void execute();
void decide();
void victory();

int man=3;
int XX=0;
int businessman_up=man,businessman_down=0,slave_up=man,slave_down=0;
int &b_u=businessman_up,&b_d=businessman_down,&s_u=slave_up,&s_d=slave_down;
const string businessman="O",slave="X";

void up()
{
    victory();    //判断是否完成
    ++XX;
    if(b_u>=2&&s_d!=0){    //判断商人是否符合过河条件
        b_u=b_u-2,b_d=b_d+2;
        decide();
        b_u=b_u+2,b_d=b_d-2;
    }
    if(b_u>=1&&b_d!=0){    //判断商人是否符合过河条件
        b_u=b_u-1,b_d=b_d+1;
        decide();
        b_u=b_u+1,b_d=b_d-1;
    }
    if(b_u>=1&&s_u>=1){    //判断商人和奴隶是否符合过河条件
        b_u=b_u-1,b_d=b_d+1,s_u=s_u-1,s_d=s_d+1;
        decide();
        b_u=b_u+1,b_d=b_d-1,s_u=s_u+1,s_d=s_d-1;
    }
    if(s_u>=1)    ;    //判断奴隶是否符合过河条件
    if(s_u>=2&&b_d!=1){    //判断奴隶是否符合过河条件
        s_u=s_u-2,s_d=s_d+2;
        decide();
        s_u=s_u+2,s_d=s_d-2;
    }
}
void down()
{
    victory();
    --XX;
    if(s_d>=2);    //判断奴隶是否符合过河条件
    if(s_d>=1){    //判断奴隶是否符合过河条件
        s_u=s_u+1,s_d=s_d-1;
        decide();
        s_u=s_u-1,s_d=s_d+1;
    }
    if((b_d>=1&&s_d>=1)&&(b_d-1!=0&&s_d-1!=0)){    //判断商人和奴隶是否符合过河条件
        b_u=b_u+1,b_d=b_d-1,s_u=s_u+1,s_d=s_d-1;
        decide();
        b_u=b_u-1,b_d=b_d+1,s_u=s_u-1,s_d=s_d+1;
    }
    if(b_d>=1){    //判断商人是否符合过河条件
        b_u=b_u+1,b_d=b_d-1;
        decide();
        b_u=b_u-1,b_d=b_d+1;
    }
    if(b_d>=2){    //判断商人是否符合过河条件
        b_u=b_u+2,b_d=b_d-2;
        decide();
        b_u=b_u-2,b_d=b_d+2;
    }
}
void decide()    //判断过河后是否符合游戏条件
{
    if(b_u>=s_u&&b_d>=s_d)    execute();
    if(b_u==0&&b_d>=s_d)    execute();
    if(b_d==0&&b_u>=s_u)    execute();   
}
void execute()        //输出
{
    for(int i=0;i!=b_u;++i)
        std::cout<<businessman<<" ";
    for(int i=0;i!=s_u;++i)
        std::cout<<slave<<" ";
    std::cout<<"\n************\n";
    for(int i=0;i<b_d;++i)
        std::cout<<businessman<<" ";
    for(int i=0;i<s_d;++i)
        std::cout<<slave<<" ";
    std::cout<<"\n\n";            
    if(XX==1)
        down();
    else up();
}
void victory()    //判断是否完成
{
    if(b_u==0&&s_u==0)
        exit(0);
}
int main()
{
    execute();
    return 0;
}
搜索更多相关主题的帖子: 意见 
2009-12-24 08:25
一尛星一
Rank: 2
来 自:湖北孝感
等 级:论坛游民
帖 子:41
专家分:49
注 册:2009-10-17
收藏
得分:0 
谢谢大家的支持!!!
2010-01-05 08:57
快速回复:一个很复杂的问题,本人自已做出来了!望大家提提意见!
数据加载中...
 
   



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

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