比酒量问题与二叉树搜索和路径问题
来源:互联网 发布:数据库维护需要什么 编辑:程序博客网 时间:2024/05/17 02:21
比酒量问题:
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”
请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
如果有多个可能的答案,请列出所有答案,每个答案占一行。
刚开始我的想法是这样的:
构造20棵树,树根的值分别是1,2,.......,20.然后搜索路径使得路径上的和是20!。但是我发现这样是行不通的,因为20!已经溢出,不管是long还是int。而且最后我发现我小题大作了。因为这道题无非就是一个多项式穷举的问题,就是利用穷举法求方程1/a+1/b+1/c+1/d = 1的所有解。直接通分一下,也就是bcd+acd+abd+abc=abcd。其中20>=a>=b>=c>=d>=1.所以这道题归根结底是一道数学题而不是编程题。用四个for循环便可以求得其解:
#include<iostream>
using namespace std;
int maxN = 20;
int a;
int b;
int c;
int d;
int count = 0;
int main(){
for(a=1;a<=maxN;a++){
for(b=1;b<=a;b++){
for(c=1;c<=b;c++){
for(d=1;d<=c;d++){
count++;
if(b*c*d+a*c*d+a*b*c+a*b*d== a*b*c*d)
cout<<a<<"\t"<<b<<"\t"<<c<<"\t"<<d<<endl;
}
}
}
}
cout<<endl<<count<<endl;
}
====================================================================
在这也贴一段用递归寻找特定和的二叉树路径的算法,自己写的:
int sum(int count,int* x){
int tmp = 0;
for(int i=0;i<=count;i++){
tmp += x[i];
}
return tmp;
}
bool Place(int count,int* x,int des,BinaryTreeNode* t){
if(t->m_nValue + sum(count,x) > des)
return false;
return true;
}
void FindPath(int count,int* x,int des,BinaryTreeNode* t){
if(Place(count,x,des,t)){
count++;
x[count] = t->m_nValue;
if(t->m_pLeft == NULL && t->m_pRight == NULL){
if(sum(count,x) == des){
for(int i=0;i<=count;i++)
cout<<x[i]<<" ";
cout<<endl;
}
}else{
if(t->m_pLeft != NULL)
FindPath(count,x,des,t->m_pLeft);
if(t->m_pRight != NULL)
FindPath(count,x,des,t->m_pRight);
}
}
}
- 比酒量问题与二叉树搜索和路径问题
- 比酒量问题
- 二叉树路径和问题
- 二叉树遍历的应用(路径和问题,判断是否是二叉搜索树,判断是否是二叉平衡树)
- 数据结构与算法问题 二叉搜索树
- ”比酒量“问题——蓝桥杯,简洁方法实现
- 二叉树路径问题
- 蓝桥杯 比酒量(暴力搜索)
- 最优二叉搜索树问题
- 最优二叉搜索树问题
- 比酒量
- 比酒量
- 比酒量
- 比酒量
- 比酒量
- 比酒量
- 比酒量
- 比酒量
- Delphi中使用SetLength分配的动态数组空间在越界赋值后出现invalid pointer operation异常
- TeeChart7 Pro中FastLine最多可添加的点数
- 游戏设计的秘密
- dig源码分析
- 表格的样式,留着慢慢看吧
- 比酒量问题与二叉树搜索和路径问题
- 大规模网格形碰撞检测
- 微软正式宣布 Windows Phone 7.8 功能及上市时间
- 关于RGB、YUY2、YUYV、YVYU、UYVY、AYUV DirectShow中常见的RGB/YUV格式
- 转载:悲情英雄40年:AMD的兴起、衰落、未来
- 雅虎 CEO 梅耶尔一句话23个单词彻底撕碎了 RIM
- sql语句字符串处理大全
- 微软下一代操作系统代号 Blue 或免费提供
- freebsd 安装mysql5.1