一个算法题,请求各位高手帮忙。

baojunling2008 2009-02-26 07:59:48
这个是我面试的时候的两个面试的题,求各位能够帮帮忙
1,有一个房间,其中里面的桌子,每次可以做奇数个人。
如果一个桌子做3个人,那么剩余2个人。
如果做5个人,那么剩余4个人
如果做7个人,那么剩余6个人

如果做9个人,那么剩余8个人
如果做11个人 那么就正好做满
求一共有多少个人
要求用java 写出具体实现的算法。

2 有A,B,C三个秆子,A上有11个盘子,盘子大小不一样。现在要求把11个盘子移到b杆上。要求盘子大的放在下面
要求用java 写出具体实现的算法。

...全文
352 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
baojunling2008 2009-03-10
  • 打赏
  • 举报
回复
还有 第一个题确实是一个桌子只能够做固定的人数 嘿嘿
baojunling2008 2009-03-10
  • 打赏
  • 举报
回复
谁能解释一下下面的语句
public class Haniojava
{
public static void main(String args[])
{
byte n=2;
char a='A',b='B',c='C';
hanio(n,a,b,c);
}

public static void hanio(byte n,char a,char b,char c)
{
if(n==1)
System.out.println("move "+a+" to "+b);
else
{
hanio((byte)(n-1),a,c,b);//请解释
System.out.println("move "+a+" to "+b);
hanio((byte)(n-1),c,b,a);//请解释
}
}
}
爱摸鱼de老邪 2009-03-09
  • 打赏
  • 举报
回复
依照这个理解,跟前面大家提到的方法一起比较下:

public class test36
{
public static void main(String[] args)
{
int pNum ;//pNum为人数
int i;
for( i = 1; ;i++ )
{//i为桌数
pNum = 11*i*10+9;
if(pNum%9==8 && pNum%7 ==6 )
{
break;
}
}
System.out.println("第一种方法计算,桌子数为:"+i+" 人数为:"+pNum);
i=2;
for(; ;i++ )
{ //i为桌数
if(((11*i-8)%9==0) && ((11*i-6)%7 ==0)&&((11*i -4)%5==0)&&((11*i-2)%3==0))
{
break;
}
}
System.out.println("第二种方法计算,桌子数为:"+i+" 人数为:"+11*i);
}
}

第一种方法:40个桌子,4409人
第二种方法:229个桌子,2519人
呵呵,第一种方法要玩叠罗汉了。
爱摸鱼de老邪 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zk20052009 的回复:]
引用 15 楼 q138026310 的回复:
这当然可能
意思是每张桌子都要保证有N人,
少于N人即使有桌子也是不能坐的

[/Quote]
如果加上这个条件,还差不多,呵呵,这个要问楼主是不是了。
zk20052009 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 q138026310 的回复:]
第一题是错的 不可能有这样的事

每张桌子上做的人越多 剩下的越来越多????!!!!

不可能的 要么就是楼主没表达好


第二题冒泡
[/Quote]

这当然可能
意思是每张桌子都要保证有N人,
少于N人即使有桌子也是不能坐的
whlinl 2009-03-09
  • 打赏
  • 举报
回复
第一种,539?
KingZChina 2009-03-09
  • 打赏
  • 举报
回复
传说中的汉诺塔 呵呵
爱摸鱼de老邪 2009-03-09
  • 打赏
  • 举报
回复
嗯,第二种方法也有问题。等我修正下,呵呵,不好意思。
爱摸鱼de老邪 2009-03-08
  • 打赏
  • 举报
回复
第一题楼主确定描述清楚了?
第二题汉诺塔问题,用递归就可以了,一般的编程书上都有的。
q138026310 2009-03-08
  • 打赏
  • 举报
回复
上面做出来的第一题 都自己检查看看 错的没边了
q138026310 2009-03-08
  • 打赏
  • 举报
回复
第一题是错的 不可能有这样的事

每张桌子上做的人越多 剩下的越来越多????!!!!

不可能的 要么就是楼主没表达好


第二题冒泡
goodmrning 2009-03-06
  • 打赏
  • 举报
回复
二分查找法:
public int find(double searchKey)
{
int lowerBound = 0;
int upperBound = nElems-1;
int curIn;
while(true)
{
curIn = (lowerBound + upperBound ) / 2;
if(a[curIn]==searchKey)
return curIn; // found it
else if(lowerBound > upperBound)
return nElems; // can't find it
else // divide range
{
if(a[curIn] < searchKey)
lowerBound = curIn + 1; // it's in upper half
else
upperBound = curIn - 1; // it's in lower half
} // end else divide range
} // end while
} // end find
goodmrning 2009-03-06
  • 打赏
  • 举报
回复
汉诺塔:
public class Haniojava
{
public static void main(String args[])
{
byte n=2;
char a='A',b='B',c='C';
hanio(n,a,b,c);
}

public static void hanio(byte n,char a,char b,char c)
{
if(n==1)
System.out.println("move "+a+" to "+b);
else
{
hanio((byte)(n-1),a,c,b);
System.out.println("move "+a+" to "+b);
hanio((byte)(n-1),c,b,a);
}
}
}
baojunling2008 2009-03-06
  • 打赏
  • 举报
回复
汉诺塔用 java 怎么写啊 ??
还有
二分查找法 用java 怎么写啊???
灬戮月灬 2009-03-05
  • 打赏
  • 举报
回复
第二个题应该能做出来吧,简化版的汉诺塔
guoapeng 2009-03-04
  • 打赏
  • 举报
回复
第一题,是这些数的小公因数-1
即5*7*9 -1

第二题 : 就是可以用冒泡排序
  • 打赏
  • 举报
回复
清华版《数据结构》的光盘里有汉诺塔的
rypgood 2009-03-04
  • 打赏
  • 举报
回复
第二题就是个汉诺塔的问题
学c语言的时候没学过?
baojunling2008 2009-03-04
  • 打赏
  • 举报
回复
1,有一个房间,其中里面的桌子,每次可以做奇数个人。%这条说明是个奇数
如果一个桌子做3个人,那么剩余2个人。 %这条被9 余8包那条含了
如果做5个人,那么剩余4个人 %结合上面的说明尾数为9
如果做7个人,那么剩余6个人
如果做9个人,那么剩余8个人
如果做11个人 那么就正好做满

借用二楼的大致为
int pNum ;//pNum为人数
for(int i = 1; ;i ++ ){ //i为桌数
pNum = 11*i*10+9;
if(pNum%9==8 && pNum%7 ==6 ){
break;
}
}


第二个问题的算法大概是
char s[3]= {'A','B','C'};
void move(int n,int out,int in)
{
int mid;
mid=3-out-in;
if(n==1)
{
cout < <"move from " < <s[out] < <" to " < <s[in] < <endl;
}
else
{
move(n-1,out,mid);
move(1,out,in);
move(n-1,mid,in);
}
}


void main()
{
move(11,0,1);
cout < <endl < <"Finish!";
}
非常感谢楼上的 嘿嘿
exp555 2009-02-28
  • 打赏
  • 举报
回复
1,有一个房间,其中里面的桌子,每次可以做奇数个人。%这条说明是个奇数
如果一个桌子做3个人,那么剩余2个人。 %这条被9 余8包那条含了
如果做5个人,那么剩余4个人 %结合上面的说明尾数为9
如果做7个人,那么剩余6个人
如果做9个人,那么剩余8个人
如果做11个人 那么就正好做满

借用二楼的大致为
int pNum ;//pNum为人数
for(int i = 1; ;i ++ ){ //i为桌数
pNum = 11*i*10+9;
if(pNum%9==8 && pNum%7 ==6 ){
break;
}
}


第二个问题的算法大概是
char s[3]= {'A','B','C'};
void move(int n,int out,int in)
{
int mid;
mid=3-out-in;
if(n==1)
{
cout<<"move from "<<s[out]<<" to "<<s[in]<<endl;
}
else
{
move(n-1,out,mid);
move(1,out,in);
move(n-1,mid,in);
}
}


void main()
{
move(11,0,1);
cout<<endl<<"Finish!";
}
加载更多回复(5)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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