题目

解决代码及点评


/************************************************************************/
/*
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. ZOJ3640-Help Me Escape

    Help Me Escape Time Limit: 2 Seconds      Memory Limit: 32768 KB Background     If thou doest well, ...

  2. php - 微信 - 缓存access_token类。

    可扩展性很强. <?php namespace LaneWeChat\Core; /** * 微信Access_Token的获取与过期检查 * Created by Lane. * User: ...

  3. Android的WiFi开启与关闭

    注意:要首先注册开启和关闭WiFi的权限, <?xml version="1.0" encoding="utf-8"?> <manifest ...

  4. 断开/删除 SVN 链接(.svn)的几种方法

    上传到正式的服务器时需要去掉这些不必要的文件,找到了几种方法: 1.windows下: xcopy project_dir project_dir_1 /s /i (从project_dir 复制文件 ...

  5. 如何设置ssh安全只允许用户从指定的IP登陆

    原文链接: 如何设置ssh安全只允许用户从指定的IP登陆 由于开发上传文件需要  在服务器上开启  允许用户名和密码ssh登录.这样不太安全.百度后参考文章现在ssh用户名和密码登录的ip. 登录服务 ...

  6. ZOJ 3329 One Person Game 【概率DP,求期望】

    题意:有三个骰子,分别有k1,k2,k3个面. 每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和. 当分数大于n时结束.求游戏的期望步数.初始分数为0 设dp[i]表示达到 ...

  7. USACO Wormholes 【DFS】

    描述 农夫约翰爱好在周末进行高能物理实验的结果却适得其反,导致N个虫洞在农场上(2<=N<=12,n是偶数),每个在农场二维地图的一个不同点. 根据他的计算,约翰知道他的虫洞将形成 N/2 ...

  8. 【集训笔记】博弈论相关知识【HDOJ 1850【HDOJ2147

    以下资料来自:http://blog.csdn.net/Dinosoft/article/details/6795700 http://qianmacao.blog.163.com/blog/stat ...

  9. 浏览器hack总结 详细的浏览器兼容性解决方法

    由于各浏览器对页面的解析不同,会导致页面在不同浏览器中显示的样式不一致,为了保持页面的统一,经常需要对浏览器进行兼容性问题的调试. CSS Hack 面对浏览器诸多的兼容性问题,经常需要通过CSS样式 ...

  10. Windows Phone 8初学者开发—第18部分:在页面间导航

    原文 Windows Phone 8初学者开发—第18部分:在页面间导航 原文地址:  http://channel9.msdn.com/Series/Windows-Phone-8-Developm ...