编程实现,有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升
来源:互联网 发布:ios数据存储方式 编辑:程序博客网 时间:2024/04/30 22:22
1、编程解决如下数学问题:有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升?要求以如下格式打印出分水步骤。(20分)
a12 b8 c5
12 0 0
a12 b8 c5
12 0 0
* * * ( “*”表示当前状态下每个容器的盛水量)
. . .
. . .
6 6 0
使用DFS:
#include <stdio.h>typedef struct container{int size;int present;} container;struct statu{container cont[3];}status[50];void saveStatus(struct statu *status1,struct statu *status2){for(int i=0;i<3;i++){status2->cont[i]=status1->cont[i];}}int is_repeat(struct statu status[],int num){for(int i=0;i<=num;i++)if(status[i].cont[0].present==status[num+1].cont[0].present && status[i].cont[1].present==status[num+1].cont[1].present ) return 0;return 1;}int search(struct statu status[],int num){static int count;int i,j;for(i=0;i<3;i++){for(j=0;j<3;j++){if(i==j) continue;//zijihezijiif(status[num].cont[i].present==0) break;if(status[num].cont[j].present==status[num].cont[j].size) continue;saveStatus(&status[num],&status[num+1]);if((status[num].cont[i].present+status[num].cont[j].present)<=status[num].cont[j].size){status[num+1].cont[j].present+=status[num+1].cont[i].present;status[num+1].cont[i].present=0;}else{status[num+1].cont[i].present-=status[num+1].cont[j].size-status[num+1].cont[j].present;status[num+1].cont[j].present=status[num+1].cont[j].size;}if(is_repeat(status,num)==0) continue;if(status[num+1].cont[0].present==6 && status[num+1].cont[1].present==6){printf("共有%d多少种方法:\n",++count);for(int k=0;k<num+2;k++){printf("步骤%d:%d %d %d\n",k+1,status[k].cont[0].present,status[k].cont[1].present,status[k].cont[2].present);}}search(status,num+1);}}}int main(){container a12={12,12},b7={7,0},c5={5,0};status[0].cont[0]=a12;status[0].cont[1]=b7;status[0].cont[2]=c5;if(!search(status,0)) printf("此题无解\n");return 0;}
- 编程实现,有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升
- 关于使用一个5升容器和一个6升容器量出3升水的一点解决办法
- 量筒量水问题1--一个盛满水的池子,有一个6升的量筒,一个5升的量筒,怎样量出3升水?
- 有10升水装在杯子里,还有一个3升的杯子和一个7升杯子,请问如何实现5、5平分?
- 用容积为15升和27升的两个杯子向一个水桶中注水,可以精确向一个水桶中注入多少升水呢
- 有两个瓶子一个瓶承5升水一个瓶子成3升水,那怎么可以成四升水呢
- 代码解题之“*升水,有个*升,和*升的空桶,让你取出*升水”
- 解:通过一个9升水的桶和一个4升水的桶在河里取6升水
- 面试题—有两个无刻度的水桶,分别能装7升水(记为A)和5升水(记为B),那么通过这两个桶可能获得多少升水
- 5.准确量出2升水,如果你有4升和5升的碗
- 4.你怎样只用4升和9升的碗量出六升水?
- 怎样将一个Word表格拆分为两个
- 将一个数分解为两个整数的和
- 6.M设想有三个碗。A碗(8升容量)里有5升水。B碗(5升容量)里有3升水。C碗(3升容量)里有2升水。 你能只倒两次而准确地量出1升水吗?
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 利用字符串和列表将两个通讯录文本合并为一个文本
- 利用字符串和列表将两个通讯录文本合并为一个文本
- #利用字符串和列表将两个通讯录文本合并为一个文本
- N的阶乘递归算法
- vijos1071【动态规划】
- mysql远程连接数据库慢的解决方案
- poj 3009(深度搜索)
- UITableView用法
- 编程实现,有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升
- js字母大小写转换
- 外网访问内网服务器教程
- EL表达式replace缺陷
- jquery-autocomplete的用法及参数
- C#中params关键字的作用理解
- 如何在tableView的数据源和代理事件之外获取当前点击的是哪一行
- .net 的动态语言实现DCI架构模式的角色混入
- 编写Android的exe可执行文件并运行