题目

解决代码及点评


/************************************************************************/
/*
89. 牛虎同渡问题。
三只牛和三只虎渡河,船只能容1至2只牛和虎(牛和虎各一只、单独一只牛或虎、或两只同类)。
任一岸边若虎多于牛则虎会吃牛,问怎样才能使牛不被伤害而安全过河。
*/
/************************************************************************/
#include <stdio.h>
#include <stdlib.h>
static int num=0;
bool IsSafe89(int *arr)
{
if (arr[1]!=0&&arr[0]!=0&&arr[0]<arr[1])
{
return false; }
else
return true;
}
void printfarr89(int *arr)
{
for (int i=0;i<3;i++)
{
printf("%5d",arr[i]);
}
}
//i=0 代表1牛一虎 1代表 一牛 2 代表 1虎 3代表 二牛 4 代表 二虎
bool Move(int *farr,int*tarr,int h,int zs)//h表示方向 1表示A-B 0 表示B-A zs 表示这次送过去的标号
{ bool isfound=false;
if (h&&tarr[0]==3&&tarr[1]==3||!h&&farr[0]==3&&farr[1]==3)
{
printf("结束了");
printf("\n\n\n\n\n"); isfound=true; }
else
{ for (int i=0;i<5;i++)
{
if (i==zs)
continue; #pragma region 条件匹配
if (i==0)
{
if (farr[0]>=1&&farr[1]>=1)
{
farr[0]--;
farr[1]--;
tarr[0]++;
tarr[1]++;
}
else
continue;
}
if (i==1)
{
if (farr[0]>=1)
{
farr[0]--; tarr[0]++; }
else
continue;
}
if (i==2)
{
if (farr[1]>=1)
{ farr[1]--; tarr[1]++;
}
else
continue;
}
if (i==3)
{
if (farr[0]>=2)
{
farr[0]=farr[0]-2; tarr[0]=tarr[0]+2; }
else
continue;
}
if (i==4)
{
if (farr[1]>=2)
{ farr[1]=farr[1]-2; tarr[1]=tarr[1]+2;
}
else
continue;
}
#pragma endregion 条件匹配 if (h==0)
{printf("反反");
}
printf("移动%d\n",i);
if (IsSafe89(farr))
{
if (IsSafe89(tarr)&&h)
{
isfound= Move(farr,tarr,h,i);
}
else
{
isfound=Move(tarr,farr,!h,i);
}
if (!isfound)
{
#pragma region 条件匹配1
if (i==0)
{ farr[0]++;
farr[1]++;
tarr[0]--;
tarr[1]--; }
if (i==1)
{ farr[0]++; tarr[0]--; }
if (i==2)
{ farr[1]++; tarr[1]--; }
if (i==3)
{ farr[0]=farr[0]+2; tarr[0]=tarr[0]-2; }
if (i==4)
{ farr[1]=farr[1]+2; tarr[1]=tarr[1]-2; }
#pragma endregion 条件匹配1
printf("不符合条件回退");
}
}
else {
#pragma region 条件匹配1
if (i==0)
{ farr[0]++;
farr[1]++;
tarr[0]--;
tarr[1]--; }
if (i==1)
{ farr[0]++; tarr[0]--; }
if (i==2)
{ farr[1]++; tarr[1]--; }
if (i==3)
{ farr[0]=farr[0]+2; tarr[0]=tarr[0]-2; }
if (i==4)
{ farr[1]=farr[1]+2; tarr[1]=tarr[1]-2; }
#pragma endregion 条件匹配1
printf("不符合条件回退%d\n",i);
} }
}
return isfound;
}
void main()
{ printf("i=0 代表1牛一虎 1代表 一牛 2 代表 1虎 3代表 二牛 4 代表 二虎\n");
int arr1[2]={3,3};
int arr2[2]={0,0};
Move(arr1,arr2,1,-1);
printf("asdasfdsf"); system("pause");
}

代码编译以及运行

由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:

1)新建工程

2)选择工程

3)创建完工程如下图:

4)增加文件,右键点击项目

5)在弹出菜单里做以下选择

6)添加文件

7)拷贝代码与运行

程序运行结果

代码下载

http://download.csdn.net/detail/yincheng01/6681845

解压密码:c.itcast.cn






基于visual Studio2013解决C语言竞赛题之1089牛虎过河的更多相关文章

  1. 基于visual Studio2013解决C语言竞赛题之1079狼羊过河

        题目 解决代码及点评 /************************************************************************/ /* ...

  2. 基于visual Studio2013解决C语言竞赛题之0401阶乘

      题目 解决代码及点评 这个是一道经典的教科书题目,基本上每本基础的c/c++语言教科书都会有这个题目 用来演示循环语句 #include <stdio.h> #include ...

  3. 基于visual Studio2013解决C语言竞赛题之0205位数求和

     题目

  4. 基于visual Studio2013解决C语言竞赛题之0201温度转换

    题目 解决代码及点评 #include <stdio.h> #include <stdlib.h> void main() { float f; float c; float ...

  5. 基于visual Studio2013解决C语言竞赛题之0409 100以内素数

       题目 解决代码及点评 在已经知道素数是怎么判断的基础上,增加循环,可以判断出100以内的素数 /******************************************* ...

  6. 基于visual Studio2013解决C语言竞赛题之0408素数

      题目 解决代码及点评 判断一个数是不是素数的方法,一般是看n是不是能被n以内的某个整数(1除外)整除 为了提高效率,这个整数范围一般缩小到n的平方根 如果在这个范围内的整数都不能整除,那么 ...

  7. 基于visual Studio2013解决C语言竞赛题之0407最大值最小值

      题目 解决代码及点评 这道题考察循环和比较 /*********************************************************************** ...

  8. 基于visual Studio2013解决C语言竞赛题之0406数列求和

      题目 解决代码及点评 这个题目,还是考察for循环的使用 以及数列规律,该数列的特点是第n个分子 = 第n-1个分子 + 第n-2个分子,分母也是此规律 而另外一个规律是第n个分子和第n- ...

  9. 基于visual Studio2013解决C语言竞赛题之0405阶乘求和

      题目 解决代码及点评 这道题和上一道题类似,第n个累加项 = n-1累加项的n倍 由于有这个规律,我们可以用一个for循环实现 但是例子代码并没有这么做,大家可以回去修改下代码,使得代码更 ...

随机推荐

  1. ViewPager引导页效果实例源码

    首先大家先找到本地的sdk,然后找到Google提供的API,具体查找方法如下:sdk——>docs——>index.html——>develop——>training——&g ...

  2. iOS中 视频直播功能-流媒体的使用

    简单介绍: HLS 协议 : >5M会被AppStore拒绝  服务器要求低   延迟高    多平台   RTMP 协议:  电视直播   PC端使用    配合flash插件  及时性好  ...

  3. 比赛--找丢失的数--解题报告T

    找丢失的数 题目大意: There is a permutation without two numbers in it, and now you know what numbers the perm ...

  4. Linux内核态抢占机制分析(转)

    Linux内核态抢占机制分析  http://blog.sina.com.cn/s/blog_502c8cc401012pxj.html 摘 要]本文首先介绍非抢占式内核(Non-Preemptive ...

  5. javascript (string 部分)

    <html> <body> <script type="text/javascript"> var str="ab:cd:ef:gh& ...

  6. (Problem 21)Amicable numbers

    Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into ...

  7. fancyBox简单入门

    1. 下载 fancyBox,解压后根据需要将文件复制到网页文件夹中(建议不要更改目录结构),并在网页源码中引入相应的 css 样式和 js 文件(如果更改了目录结构,引入的时候请调整相应代码,对应它 ...

  8. JavaScript自调用匿名函数

    Self-Invoking Anonymous Function,即自调用匿名函数.顾名思义,该函数没有名称,不同的是,该函数定义后立即被调用.该函数的作用是在应用中初始化或做一次性工作. 普通匿名函 ...

  9. windows下以指定用户访问SMB服务器进行读写

    需求:最近要开发某系统前端界面,但是该系统是部署在linux服务器上,前端是用php开发,实时调试运行需要linux下系统环境支持, 每次修改都需要手动传到服务器上,尤其是debug阶段,每修改一点就 ...

  10. iOS WebCore的WebEvent和EventHandler

    WebEvent是iOS专有的类,负责封装和携带从UIKit得到的系统事件信息,并由WebKit层的WAKResponder子类传递到WebCore的EventHandler. UIKit层的逻辑可参 ...