根据微软面试算法题修改,贴出来征解.5天后没有最优解,本人公布答案大家讨论。

softrain 2006-09-14 04:14:17
一种飞机可在空中相互加油,单架飞机加满油后可绕地球飞行1/m圈。问至少多少架这样的飞机一起从同一个地方飞,才可以至少有一架飞机绕地球一周后飞回来。
...全文
2433 93 打赏 收藏 举报
写回复
用AI写文章
93 条回复
切换为时间正序
请发表友善的回复…
发表回复
liaoyan525 2007-01-15
  • 打赏
  • 举报
回复
不会是没有吧,都一种飞机应该不太可能.
liaoyan525 2007-01-15
  • 打赏
  • 举报
回复
没看清楚,对不起
liaoyan525 2007-01-15
  • 打赏
  • 举报
回复
可以是无数个,要看它的起飞地点.
softrain 2006-09-26
  • 打赏
  • 举报
回复
顶一下
ctu_85 2006-09-23
  • 打赏
  • 举报
回复
((1-m/k)exp(k-1))*t=m/k
m为每架飞机只能飞的圈数
t为需要的飞机数
k表示每次飞机飞1/k圈后停下来补充给其余飞机加满油

这个题目不是纯粹的以2为幂次的解题
木头菇 2006-09-23
  • 打赏
  • 举报
回复
学习中
sniperhuangwei 2006-09-21
  • 打赏
  • 举报
回复
针对所有情况的公式还没推出来
sniperhuangwei 2006-09-21
  • 打赏
  • 举报
回复
以上解法全错,题目要保证没有一架飞机坠毁,当飞机能飞1/2地球时,最少需要7架飞机.
首先,三架飞机同时顺时针起飞.在到达3/16地球时,可以C,B飞机加油,使得A有满油.
此时,C和B各剩4/8和3/8的油,都能飞回目的地.A满油,能飞到11/16地球处.

在适当的时间,D,E,F要从逆时针方向出发.依前面推导.D飞机在3/16时为满油,E,F返回.当D到达
11/16处时,剩6/8的汽油,D给A加油,使得A,D能飞到14/16处.G飞机适时起飞,在14/16处接应,给A,D加油.A,D,G全部飞回基地并且全部耗尽燃油.

这样计算7加飞机参与飞行后,有两架飞机飞回后还剩1/8的汽油.也就是浪费了的汽油.
softrain 2006-09-21
  • 打赏
  • 举报
回复
楼上的写的好,我的算法由于超过double的精度,导致在20处开始出现误差.
改正如下:
int getplanessimp(double& range/*飞行距离圈数*/,int m/*一箱油飞行圈数*/)//简单飞行
{
// 1/m+1/2m+...+1/nm >= range
double d = 0.0;//m*飞行距离
int n = 0;//飞机数
double t = range*m;
while(d < t && n >= 0)
{
n++;
d += 1.0/(n);//这里必须做浮点运算
}
range = d/m;//返回实际飞行距离
return n;
}
int getplanes(int m/*一箱油飞行圈数*/)
{
//从简单飞行记录看,为了多跑一个1/m距离,则需要增加的飞机比以前所有的飞机加起来还多
//所以每次都从基地接应返回的飞机,会节省很多。要实现能接回且飞机最好,则需要计算最远飞行距离为0.5+1.0/(2*m)圈
double d = 0.5+1.0/(2*m);//飞行半圈加上半箱油的距离
int n = 0;//飞机数
n = getplanessimp(d,m);

double r = 1.0 - d;//剩余距离
if(r <= 1.0/m)//返回不足一箱油距离,则从基地起飞的飞机需要飞行的距离为2r
{
r *= 2;
}
else//否则需要飞行的距离为返回距离加一箱油距离
{
r += 1.0/m;
}
while(r > 0.0)
{
double t = r;
n+=getplanessimp(t,m);//这里t为实际飞行距离,可以认为是从接回飞机处拿回接力棒,实际上可以把一架飞机的油全部给接回飞机
r -= 1.0/m + (t-r);//实际剩余距离
}
return n;
}

结果:
m : 同时起飞 不同时起飞
1 : 1 1
2 : 4 3
3 : 11 9
4 : 31 16
5 : 83 27
6 : 227 46
7 : 616 77
8 : 1674 128
9 : 4550 212
10: 12367 352
11: 33617 582
12: 91380 961
13: 248397 1586
14: 675214 2618
15: 1835421 4317
16: 4989191 7121
17: 13562027 11742
18: 36865412 19363
19: 100210581 31926
20: 272400600 52641
sniperhuangwei 2006-09-21
  • 打赏
  • 举报
回复
是5架
sjjf 2006-09-21
  • 打赏
  • 举报
回复
唉,偶的blog写的很详细。怎么没有人看呢?
sniperhuangwei 2006-09-21
  • 打赏
  • 举报
回复
错了,1/2时,6架就够了
too_slow 2006-09-20
  • 打赏
  • 举报
回复
算法是在下面实现了,思路很简单.
不知道对不对:)
其中假设了飞机贡献完油就地停止
#include <stdio.h>

int need_plane(int m);
int main()
{
int m = 50; //一架飞机可以飞1/m圈地球
int n = need_plane(m);
printf("%d\n",n);
return 0;
}
//贪心算法:保证每架飞机浪费的最少,即只要其它飞机有空的就加满.
第一架飞机给了最后一架1/n的油
第二架飞机给了最后一架1/n-1的油
.....
倒数第二架给了最后一架1/2的油
int need_plane(int m)
{
double n = 1; //保存需要的飞机数
double sum_petro = 1.0;
while(sum_petro<m)
{
n++;
sum_petro += 1/n;

}
return n;
}
结果:
m = 1 ; n = 1
m = 2 ; n = 4
m = 3 ; n = 11
m = 4 ; n = 31
m = 5 ; n = 83
.
.
.
m = 20; n = 272400600
.
..
qinqinxiatiao 2006-09-20
  • 打赏
  • 举报
回复
3架吧

用立体的思想一下就想通了~~ 我大学同寝室的达人解答的~~
too_slow 2006-09-20
  • 打赏
  • 举报
回复
我觉得应该是充分利用每一个飞机,一旦其他飞机有足够的空间放它的油并留够自己飞回的油就开始往回飞了
我来写写看.
Nash1983 2006-09-20
  • 打赏
  • 举报
回复
关注中
hai1039 2006-09-19
  • 打赏
  • 举报
回复
什么叫做"绕地球一周"? 是否必须走最大周长?

不然可以往两极走,减小一周的长度。

极端情况下,从赤道飞到南北极点转一个很小的圈,也算"绕地球一周"吧,却只走了沿赤道绕地球一周1/4的距离
niaosuy 2006-09-19
  • 打赏
  • 举报
回复
double total = 0;
int n = 1;
while(TRUE)
{
total += 1.0/n*m;
if(total >= 1.0)
break;
n *= 2;
}

n is result.
niaosuy 2006-09-19
  • 打赏
  • 举报
回复
double total = 0;
int n = 1;
while(total < 1.0)
{
total += 1.0/2*n*m;
n++;
}
xiaoyao888 2006-09-19
  • 打赏
  • 举报
回复
mark
加载更多回复(73)
内容概要:本文围绕“数据驱动下光伏建筑群源荷不确定性解析及其储能多目标低碳经济调度研究”展开,提出了一种融合数据驱动方法与多目标优化算法的综合调度框架。研究首先基于历史数据对光伏发电出力与建筑负荷的不确定性进行建模,采用概率预测与场景生成技术刻画源荷波动特性,并通过典型场景提取降低输入复杂性。在此基础上,构建了以最小化系统运行成本、降低碳排放强度、提升可再生能源消纳率为目标的多目标优化模型,引入NSGA-II等先进智能优化算法求解Pareto最优前沿,实现经济性与低碳性的协同优化。通过Python编程完成模型搭建与仿真验证,结果表明该方法能有效应对源荷双重不确定性,在保障供电可靠性的前提下,实现了储能系统的优化配置与多目标调度决策的均衡协调; 适合人群:具备一定电力系统基础知识和Python编程能力,从事能源系统优化、智能调度、低碳技术等相关领域的研究生、科研人员及工程技术人员; 使用场景及目标:①应用于光伏建筑群、工业园区微电网等分布式能源系统的运行调度;②支撑含储能系统的多目标低碳经济调度决策,兼顾能源成本节约与碳排放控制双重目标;③为相关课题的研究与工程实践提供完整的算法实现参考与可复现的仿真案例支持; 阅读建议:建议读者结合文中提供的Python代码深入理解模型构建与求解流程,重点关注不确定性建模与多目标优化的耦合机制,可在实际数据基础上复现并改进算法,进一步探索不同权重策略下的调度方案优选方法。
代码下载链接: https://pan.quark.cn/s/cd4149768c91 互联网灰度部署系统解决方案的核心内容深度阐释: 一、灰度发布概念 灰度发布(亦称金丝雀发布)是在云计算及互联网服务领域中常见的一种发布策略,其中心理念是在全面推广新版本前,先向部分用户群体开放试用,以此来降低更新过程中的潜在风险。这种发布模式能够有效地兼顾用户体验与系统稳定性,它允许企业逐步将新的代码或功能部署至生产环境,并且仅对部分用户群体可见。此种做法有助于提前识别潜在问题,对用户体验造成的影响较小,并且能够获取更为真实的用户反馈信息。 二、系统现状和建设背景 在传统的发布模式中,每次更新都需要暂停服务才能发布新版本,这在用户体验和服务连续性方面存在明显不足。伴随互联网经济的繁荣发展,移动终端与日常生活的融合日益紧密,对互联网系统的支撑需求持续增长。特别是在电信行业,系统需要实现7*24小时不间断服务,以适应快速变化的市场需求和频繁更新的技术。因此,迫切需要一种新的发布方式,即灰度发布,用以提升产品发布的效率并改善用户体验。 三、灰度发布的优势与挑战 灰度发布相较于传统全量发布的优势包括: 1. 提供了新功能的试错空间,支持边发布边进行优化。 2. 维持服务的连续性,实现无缝升级。 3. 针对不同用户群体实施功能区分,提升用户体验和满意度。 4. 收集用户反馈,为后续版本的功能迭代和优化提供指导。 然而,灰度发布同样面临挑战,例如技术实现的复杂性、增加的运维压力等。 四、灰度发布的具体实施策略 1. 建设目标:保证湖北联通对外服务的互联网程序能够实现7*24小时不中断的灰度发布,实现无缝升级,同时全面提升用户体验。 2. 总体说明:需要通过灰度发布实现迭代开发和版本快速更...

70,040

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧