基于visual Studio2013解决C语言竞赛题之1089牛虎过河
题目
解决代码及点评
/************************************************************************/
/*
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牛虎过河的更多相关文章
- 基于visual Studio2013解决C语言竞赛题之1079狼羊过河
题目 解决代码及点评 /************************************************************************/ /* ...
- 基于visual Studio2013解决C语言竞赛题之0401阶乘
题目 解决代码及点评 这个是一道经典的教科书题目,基本上每本基础的c/c++语言教科书都会有这个题目 用来演示循环语句 #include <stdio.h> #include ...
- 基于visual Studio2013解决C语言竞赛题之0205位数求和
题目
- 基于visual Studio2013解决C语言竞赛题之0201温度转换
题目 解决代码及点评 #include <stdio.h> #include <stdlib.h> void main() { float f; float c; float ...
- 基于visual Studio2013解决C语言竞赛题之0409 100以内素数
题目 解决代码及点评 在已经知道素数是怎么判断的基础上,增加循环,可以判断出100以内的素数 /******************************************* ...
- 基于visual Studio2013解决C语言竞赛题之0408素数
题目 解决代码及点评 判断一个数是不是素数的方法,一般是看n是不是能被n以内的某个整数(1除外)整除 为了提高效率,这个整数范围一般缩小到n的平方根 如果在这个范围内的整数都不能整除,那么 ...
- 基于visual Studio2013解决C语言竞赛题之0407最大值最小值
题目 解决代码及点评 这道题考察循环和比较 /*********************************************************************** ...
- 基于visual Studio2013解决C语言竞赛题之0406数列求和
题目 解决代码及点评 这个题目,还是考察for循环的使用 以及数列规律,该数列的特点是第n个分子 = 第n-1个分子 + 第n-2个分子,分母也是此规律 而另外一个规律是第n个分子和第n- ...
- 基于visual Studio2013解决C语言竞赛题之0405阶乘求和
题目 解决代码及点评 这道题和上一道题类似,第n个累加项 = n-1累加项的n倍 由于有这个规律,我们可以用一个for循环实现 但是例子代码并没有这么做,大家可以回去修改下代码,使得代码更 ...
随机推荐
- iOS导航条渐变透明
来源:HelloYeah 链接:http://www.jianshu.com/p/b8b70afeda81 下面这个界面有没有觉得很眼熟.打开你手里的App仔细观察,你会发现很多都有实现这个功能.比如 ...
- ubuntu安装greenplum依赖包
ubuntu安装greenplum的过程中有两个比较难找的包,特地写出来给大家分享一下: 错误提示1:configure: error: header file <ldap.h> is r ...
- pkg_utility
创建包名: CREATE OR REPLACE PACKAGE BODY PKG_UTILITY AS --字符串转换到索引表 PROCEDURE STR_TO_LIST(PI_STR IN VARC ...
- memcache 在php存取中的应用
当用户刷新网页或有大量用户访问网站时,就会产生大量数据库查询进程,这不但拖慢了网页打开速度,同时也给服务器带来了很大压力. 作为php菜鸟,今天刚刚接触到了 memcache 这个东东,于是自己跟着文 ...
- python中enumerate 函数
enumerate 函数用于遍历序列中的元素以及它们的下标: >>> for i,j in enumerate(('a','b','c')): print i,j 0 a 1 b ...
- 如何用 new 来动态开辟一个二维数组
一般的做法是: int **p = new int*[m]; //m行n列型 for (i = 0; i < m; ++i) { p[i] = new int[n]; for (j = 0; j ...
- mul8_unsigned multipliter
李亚民老师更注重硬件设计思想的训练.他给出的硬件设计方法更贴近底层硬件,下面看看他的设计思想: ...
- Main方法的执行过程(转)
要运行一个 main 方法 , 首先要知道 main 方法所在的 Class, 在命令行中指定这个 Class 名 Class Lava{ Private int speed = 4; Void fl ...
- [置顶] jeecg-framework-3.3.2-RELEASE 最新版本发布
平台介绍 JEECG(J2EE CodeGeneration)是一款基于代码生成器的智能开发平台,引领新开发模式(OnlineCoding模式->代码生成器模式->手工MERGE智能开 ...
- oracle scn浅析
1. 系统SCN号 查询系统SCN号的方法: select dbms_flashback.get_system_change_number from dual commit后系统SCN号会增长,但是即 ...