急求!!c语言编程水壶分水问题

急求!!c语言编程水壶分水问题,第1张

穷举法!

以下是我刚刚写的,请只用来参考借鉴,勿作它用。

//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、单次使用高温热水时间不宜过长,要做好防冻,结冻时不能使用,一定要切断电源,禁止倒置安装使用。

自动上水壶设置上水量的方法是:在选取抽水时间的程序下,按+、-键就可以了,当然进入这个功能前,是要在功能菜单下,选择电热水壶抽水时间项目才可以。

自动上水壶是一种具有自动加水功能的新型电水壶。具有一键旋转自动上水功能,只要按一下就能自动上水烧水,使用更方便。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11600461.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存