用编程解决过河问题

来源:互联网 发布:手机淘宝怎么重置密码 编辑:程序博客网 时间:2024/04/27 20:32

很久没有做题了,突然很怀念,于是心血来潮,想起了曾经小弟叫我做的这道趣味题,就花了X个小时(此处不好意思打出来,各位脑补吧)的时间,终于解决了它,那种久违的成就感好像又回来了……但是我的方法不是特别好,代码有点长(以我的水平只能这样了)。不过还是打算把它贴出来,纪念一下过去。

有一条河,河边有猎人,狼,一个男人带着两个小孩,还有一个女人带着两个 问题补充: 出一道题让大家思考: 有一条河,河边有猎人,狼,一个男人带着两个小孩,还有一个女人带着两个小孩。 条件: 1.如果猎人离开,狼就会吃掉所有人。 2。如果男人离开,女人就会掐死他的小孩,若女人离开,男人也会掐死她的小孩 3.河里有一条船,所有人都在河的一边,船上只能坐两人。(只有猎人,男人,女人会划船;一个小孩算一个人,狼也算一个。) 问:这八人该如何过河?

#include <stdio.h>#include <stdlib.h>void judge(int a[],int k,int t);int flag;int count=1;int b1[100],b2[100];int main(){    char *str,*str2;    int boat=0;    int a[8];    int i,j;    for(i=0;i<8;i++)    {        a[i]=0;    }    for(i=0;i<100;i++)    {        b1[i]=b2[i]-1;    }    while(1)    {        for(i=0;i<3;i++)        {            if(a[i]!=boat)            {                continue;            }            for(j=0;j<8;j++)            {                if(a[j]!=boat)                {                    continue;                }                a[i]=a[j]=1-boat;                judge(a,i,j);                if(flag==0)                {                    a[i]=a[j]=boat;                }                else                {                    b1[count]=i;                    b2[count]=j;                    boat=1-boat;                    break;                }            }            if(flag==1)            {                count++;                break;            }        }        if(i==3)        {            b1[count]=b2[count]=-1;            count--;            boat=1-boat;            a[b1[count]]=a[b2[count]]=boat;            continue;        }        for(i=0;i<=7;i++)        {            if(a[i]==0)            {                break;            }        }        if(i==8)        {            break;        }    }    for(i=1;i<count;i++)    {        switch(b1[i])        {            case 0:str="猎人";break;            case 3:str="狼";break;            case 1:str="男人";break;            case 4:str="男1";break;            case 5:str="男2";break;            case 2:str="女人";break;            case 6:str="女1";break;            case 7:str="女2";break;            default:break;        }        switch(b2[i])        {            case 0:str2="猎人";break;            case 3:str2="狼";break;            case 1:str2="男人";break;            case 4:str2="男1";break;            case 5:str2="男2";break;            case 2:str2="女人";break;            case 6:str2="女1";break;            case 7:str2="女2";break;            default:break;        }        if(b1[i]==b2[i]){            printf("%s",str);        }        else{            printf("%s,%s",str,str2);        }        if(i%2==0)        {            printf("回来\n");        }        else{            printf("过河\n");        }    }    printf("Hello world!\n");    return 0;}void judge(int a[],int k,int t){    flag=1;    int i,j;    if(a[0]!=a[3])    {        for(i=1;i<=7;i++)        {            if(a[i]==a[3]&&i!=3)                flag=0;        }    }    if(a[1]!=a[2])    {        if(a[6]==a[1]||a[7]==a[1]||a[4]==a[2]||a[5]==a[2])        {            flag=0;        }    }    if((b1[count-1]==k&&b2[count-1]==t)||(b1[count-1]==t&&b2[count-1]==k))    {        flag=0;    }    if((b1[count]==k&&b2[count]==t)||(b1[count]==t&&b2[count]==k))    {        flag=0;    }}

这里写图片描述

原创粉丝点击