| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1372 人关注过本帖
标题:公司一道面试题,大家试试,顺便公布我的答案
只看楼主 加入收藏
hujian100
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-9-14
收藏
 问题点数:0 回复次数:7 
公司一道面试题,大家试试,顺便公布我的答案
某飞机可以载重30人。有一次,此飞机上共载有15名美国兵和15名日本兵,但飞机在飞行的过程中出现了机械故障,此时飞机上只能承载15名士兵,所以必须抽出另外15名士兵从飞机上跳下去。此时这15名美国士兵和15名日本士兵站在一起围成一个大圆圈。第一个士兵从“1”开始报数,报到“9”的士兵就必须跳下去,然后下一个士兵有又从“1”开始报数,谁报到“9”这个数时就得跳下飞机。此后依次循环。最后当跳下去15名士兵后发现所有跳下去的人都是日本士兵,问这些日本士兵他们在这个圆圈中是怎么站位的?
搜索更多相关主题的帖子: 公布 面试 
2006-11-12 15:17
hujian100
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-9-14
收藏
得分:0 

下面我来公布一下我的答案 想看看有没有高人用别的方法做出来:
第一种方法:
#include <stdio.h>
main()
{
int i=0,j=0,count=0,m;
int position[31];
for(m=0;m<=30;m++)
position[m]=m;
while(count!=15)
{
while(j!=9)
{
i++;
if(i>30)
i=1;
if(i<=30)
{
if(position[i]!=0)
j++;
}
}
printf("%d\n",i);
j=0;
position[i]=0;
count++;
}
}

第二种方法:
#include<iostream>
using namespace std;
main()
{
int i=0,n=0,x=0,l=0;
int m;
int a[30];
int b[15];
for(m=0;m<30;m++)
a[m]=m;
for(i=0;;i++)
{
n++;
if(i<30)
{
for(x=0;x<15;x++)
for(m=0;m<l;m++)
{
if(a[i]==b[m])
i++;
if(i==30)
i=i-30;
}
if(n==9)
{
/*cout<<a[i];
cout<<endl;*/
b[l]=a[i];
l++;

n=0;
if(l==15)
break;
}
}
if(i>=30)
{
i=i-30;
for(x=0;x<15;x++)
for(m=0;m<l;m++)
{
if(a[i]==b[m])
i++;
if(i==30)
i=i-30;
}
if(n==9)
{
b[l]=a[i];
l++;
/*cout<<a[i];
cout<<endl;*/

n=0;
if(l==15)
break;
}
}
}
for(n=0;n<l;n++)
{
cout<<b[n]+1;
cout<<endl;
}
}

[此贴子已经被作者于2006-11-12 15:19:47编辑过]


2006-11-12 15:19
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
这个应该很简单:



定义num=15;

num-=9;

记录num

if(!(num>9)) num=num+9;

继续循环(共9次)



My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-11-12 19:54
hujian100
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-9-14
收藏
得分:0 
楼上的,你仔细看题想了没有,没有你想的那么简单,你要考虑已经跳下去的人所留下的位置在下一次循环时不能算做在内 还要考虑数组到头后重新折返回来

2006-11-12 20:26
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

ou....忘了...谢谢提醒

定义num=15;

num-=9;

记录num

if(!(num>9)) num=num+14;

继续循环(共9次)

这样就对了吧,改了一个数
你说的折反在 if(!(num>9)) 中就包括了


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-11-12 20:38
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
这个不就是约瑟复环问题吗?
只要改成只剩15个,留下来的不就是日本兵的原始位置.

倚天照海花无数,流水高山心自知。
2006-11-12 21:45
hainansheng
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-11-13
收藏
得分:0 
我是新手 ~~~哦哦  又是数学问题也~~~
2006-11-13 15:26
财鸟
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2006-11-2
收藏
得分:0 
很简单嘛!用个循环语句就可以实现呀!每次输出第九个数就可以实现。实现三个控制,一个是控制总数小于15循环终止,每次循环第九次就输出。每次循环结束用前次总数减循环处理的数。

最简单的就是用数组。
详细编程代码请与QQ304239467联系
2006-11-13 16:22
快速回复:公司一道面试题,大家试试,顺便公布我的答案
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024896 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved