有意思的微软面试题

来源:互联网 发布:淘宝网页 编辑:程序博客网 时间:2024/05/18 01:30

每个飞机只有一个邮箱, 飞机之间可以相互加油,一箱油可供飞机绕地球半圈。一架飞机只有一个油箱,如果飞机绕地球一圈中间不停,需要至少几个飞机。

思考:

绕行一周的飞机在飞了1/4的时候必须是满油,这样再飞1/2周耗完了飞机上的油,共飞了3/4周,而可以用其他飞机逆向飞给飞机加油。

n架飞机从距离原点dis处起飞,飞行x距离,其中一架返回,n-1架飞机满油。

n - n * x / 0.5 - (x + d) / 0.5 = n - 1;

即,x = (0.5 - d) / (n + 1);

#include <stdio.h> 

/*返回num架飞机,距离原点dis耗完一架飞机的油后,飞行距离*/

float dis(int num,float dis)

{

if(num ==1)return0;

return (0.5 - dis) / (num +1);

}

/*n架飞机,最后一架满油,飞行距离*/

float dis_sum(n)

{

float sum;

float d;

sum = 0;

d = 0;

while(n >1)

{

d = dis(n, sum);

sum += d;

n --;

}

return sum;

}


int main(void

{

int n;

float sum, dis;

n = 2;

do{

        dis = dis_sum(n -1);/*逆向飞机飞行距离,接机必须能返回, <0.25*/ 

sum = dis_sum(n) + dis +0.5;

        n ++;

}while(sum <1 || dis >0.25);

printf("leaset num:%d\n", n);

return0;

}

0 0
原创粉丝点击