题目

解决代码及点评


/************************************************************************/
/*
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. iOS 之 UINavigationController 记录

    有一阵子没有写随笔,感觉有点儿手生.一个多月以后终于又一次坐下来静下心写随笔,记录自己的学习笔记,也希望能够帮到大家. 废话少说回到正题,UINavigationController是IOS编程中比较 ...

  2. 复习C语言系列二:动态调用函数指针数组

    a:用call_fun_ptr调用afun(),b:用call_fun_ptr调用bfun() a 请输入给您指定的函数输调用的参数 afun_par ------------------------ ...

  3. oracle_SQL中ROWID与ROWNUM的使用(转)

    转自:http://www.360doc.com/content/12/0802/11/219024_227802569.shtml rownum: ROWNUM是对结果集加的一个伪列, 即先查到结果 ...

  4. CodeForces 543A - Writing Code DP 完全背包

    有n个程序,这n个程序运作产生m行代码,但是每个程序产生的BUG总和不能超过b, 给出每个程序产生的代码,每行会产生ai个BUG,问在总BUG不超过b的情况下, 我们有几种选择方法思路:看懂了题意之后 ...

  5. Ural 1319 - Hotel

       You programmers are lucky! You don't have to deal with these terrible people – designers… This st ...

  6. 由动态库文件dll生成lib库文件(手动生成.def文件,然后使用lib命令编译,非常牛),同理可使用dll生成.a库文件

    本文基于OpenBlas的编译和安装,来说明如何从一个dll文件生成lib库文件. 参考OpenBlas的说明“Howto generate import library for MingW”,和Mi ...

  7. C++ pair 使用方法

    类模板:template <class T1, class T2> struct pair 參数:T1是第一个值的数据类型,T2是第二个值的数据类型. 功能:pair将一对值组合成一个值, ...

  8. Flowers(二分水过。。。)

    Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  9. 安装Devstack的DNS问题

    所谓的OpenStack一键安装,省去了敲键盘的麻烦,但是卡在中间出了问题也是比较尴尬的 在公司内安装经常会出现卡在下载软件的地方,有时候还会出错 trick就是换一个US的dns,比如8.8.8.8

  10. 用shell脚本爬取网页信息

    有个小需求,就是爬取一个小网站一些网页里的某些信息,url是带序号的类似的,不需要写真正的spider,网页内容也是差不多的 需要取出网页中<h1></h1>中间的字符串,而且 ...