用穷举法!
以下是我刚刚写的,请只用来参考借鉴,勿作它用。
//VC2008-C环境 编译通过!
#include <stdio.h>
#include <string.h>
#include<conio.h>
#define Dep 8 //最大穷举步数,步数越多计算越慢
#define Aim 5 //目标量,5L
int Max[3]={10,7,3}//初始化各壶容积
int Con[3]={10,0,0}//初始化各壶中水量
///////////辅助函数,实现倒水运算
int* Dump(int Before[3],int Fm,int To)
{
int Res[3]
memcpy(Res,Before,sizeof(Res))
if(Before[Fm]+Before[To]>=Max[To])
Res[Fm]=Before[Fm]+Before[To]-Max[To],Res[To]=Max[To]
else
Res[Fm]=0,Res[To]=Before[Fm]+Before[To]
return Res
}
///////////递归函数,实现方法穷举运算
char* Recursive(int Before[3],int StopFlag,char step[256])
{
int Temp[3]
char str[256],temp[256]
if(StopFlag>Dep)
return ""
printf(".")
if(Before[0]!=0)
{
if(Before[1]<Max[1])
{
memcpy(Temp,Dump(Before,0,1),sizeof(Temp))
if(Temp[0]==Aim||Temp[1]==Aim||Temp[2]==Aim)
{
sprintf(str,"\r\n倒法是:%s-AB\r\n 一共:%d步\r\n结果是:[%d,%d,%d]\r\n",step,StopFlag,Temp[0],Temp[1],Temp[2])
printf("%s",str)
return str
}
else if(StopFlag<Dep)
{
sprintf(temp,"%s-AB",step)
sprintf(str,"%s",Recursive(Temp,StopFlag+1,temp))
if(str[0]!=0)return str
}
}
if(Before[2]<Max[2])
{
memcpy(Temp,Dump(Before,0,2),sizeof(Temp))
if(Temp[0]==Aim||Temp[1]==Aim||Temp[2]==Aim)
{
sprintf(str,"\r\n倒法是:%s-AC\r\n 一共:%d步\r\n结果是:[%d,%d,%d]\r\n",step,StopFlag,Temp[0],Temp[1],Temp[2])
printf("%s",str)
return str
}
else if(StopFlag<Dep)
{
sprintf(temp,"%s-AC",step)
sprintf(str,"%s",Recursive(Temp,StopFlag+1,temp))
if(str[0]!=0)return str
}
}
}
if(Before[1]!=0)
{
if(Before[0]<Max[0])
{
memcpy(Temp,Dump(Before,1,0),sizeof(Temp))
if(Temp[0]==Aim||Temp[1]==Aim||Temp[2]==Aim)
{
sprintf(str,"\r\n倒法是:%s-BA\r\n 一共:%d步\r\n结果是:[%d,%d,%d]\r\n",step,StopFlag,Temp[0],Temp[1],Temp[2])
printf("%s",str)
return str
}
else if(StopFlag<Dep)
{
sprintf(temp,"%s-BA",step)
sprintf(str,"%s",Recursive(Temp,StopFlag+1,temp))
if(str[0]!=0)return str
}
}
if(Before[2]<Max[2])
{
memcpy(Temp,Dump(Before,1,2),sizeof(Temp))
if(Temp[0]==Aim||Temp[1]==Aim||Temp[2]==Aim)
{
sprintf(str,"\r\n倒法是:%s-BC\r\n 一共:%d步\r\n结果是:[%d,%d,%d]\r\n",step,StopFlag,Temp[0],Temp[1],Temp[2])
printf("%s",str)
return str
}
else if(StopFlag<Dep)
{
sprintf(temp,"%s-BC",step)
sprintf(str,"%s",Recursive(Temp,StopFlag+1,temp))
if(str[0]!=0)return str
}
}
}
if(Before[2]!=0)
{
if(Before[0]<Max[0])
{
memcpy(Temp,Dump(Before,2,0),sizeof(Temp))
if(Temp[0]==Aim||Temp[1]==Aim||Temp[2]==Aim)
{
sprintf(str,"\r\n倒法是:%s-CA\r\n 一共:%d步\r\n结果是:[%d,%d,%d]\r\n",step,StopFlag,Temp[0],Temp[1],Temp[2])
printf("%s",str)
return str
}
else if(StopFlag<Dep)
{
sprintf(temp,"%s-CA",step)
sprintf(str,"%s",Recursive(Temp,StopFlag+1,temp))
if(str[0]!=0)return str
}
}
if(Before[1]<Max[1])
{
memcpy(Temp,Dump(Before,2,1),sizeof(Temp))
if(Temp[0]==Aim||Temp[1]==Aim||Temp[2]==Aim)
{
sprintf(str,"\r\n倒法是:%s-CB\r\n 一共:%d步\r\n结果是:[%d,%d,%d]\r\n",step,StopFlag,Temp[0],Temp[1],Temp[2])
printf("%s",str)
return str
}
else if(StopFlag<Dep)
{
sprintf(temp,"%s-CB",step)
sprintf(str,"%s",Recursive(Temp,StopFlag+1,temp))
if(str[0]!=0)return str
}
}
}
return ""
}
//在主函数中调用递归函数即可
int main()
{
Recursive(Con,1,"")
getchar()
}
1、首先看电源是否有电,用电笔测试。
2、把电水龙头电源插头插上,用电笔或者绝缘手柄好的螺丝刀把两触点做点触式连接。
3、若有电火花说明是电热水龙头是好的,不热是水压不够,调整两触点之间的间隙,不过触点间隙是出厂调整好的一般不要动;
4、若没有电火花而指示灯又不亮,说明热保护断了,更换热保护就可以了;
5、没有电火花而指示灯亮说明加热管烧坏,须更换加热管,更换加热管需要用专用工具。
6、单次使用高温热水时间不宜过长,要做好防冻,结冻时不能使用,一定要切断电源,禁止倒置安装使用。
自动上水壶设置上水量的方法是:在选取抽水时间的程序下,按+、-键就可以了,当然进入这个功能前,是要在功能菜单下,选择电热水壶抽水时间项目才可以。自动上水壶是一种具有自动加水功能的新型电水壶。具有一键旋转自动上水功能,只要按一下就能自动上水烧水,使用更方便。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)