用编程解决过河问题
来源:互联网 发布:手机淘宝怎么重置密码 编辑:程序博客网 时间: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; }}
阅读全文
0 0
- 用编程解决过河问题
- 编程解决过河问题
- Java解决编程猫狗鱼过河问题
- 用程序解决过河问题
- 用队列解决农夫过河问题
- 用队列解决农夫过河问题
- 【算法编程】过河问题
- Java解决 过河问题
- 用回溯法解决好玩的青蛙过河问题
- 回溯法解决八人过河问题
- 用BFS(广度优先搜索)算法解决农夫过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- Spark入门——SparkContext启动详解
- 13、C#里面do...while循环结构的使用
- JAVA多线程之interrupt、interrupted、isInterrupted
- BZOJ[5055]膜法师 树状数组
- 【AC梦工厂】广工华工联合训练1 A
- 用编程解决过河问题
- Vue2.0 --- vue-cli脚手架中全局引入JQ
- gcc命令
- 写程序学ML:朴素贝叶斯算法原理及实现(一)
- Lucene5(6)读取word、pdf内容
- 大话设计模式之命令模式
- 10.7 T2
- Android新特性介绍,ConstraintLayout完全解析
- 欢迎使用CSDN-markdown编辑器