这个是我面试的时候的两个面试的题,求各位能够帮帮忙
1,有一个房间,其中里面的桌子,每次可以做奇数个人。
如果一个桌子做3个人,那么剩余2个人。
如果做5个人,那么剩余4个人
如果做7个人,那么剩余6个人如果做9个人,那么剩余8个人
如果做11个人 那么就正好做满
求一共有多少个人
要求用java 写出具体实现的算法。2 有A,B,C三个秆子,A上有11个盘子,盘子大小不一样。现在要求把11个盘子移到b杆上。要求盘子大的放在下面
要求用java 写出具体实现的算法。
1,有一个房间,其中里面的桌子,每次可以做奇数个人。
如果一个桌子做3个人,那么剩余2个人。
如果做5个人,那么剩余4个人
如果做7个人,那么剩余6个人如果做9个人,那么剩余8个人
如果做11个人 那么就正好做满
求一共有多少个人
要求用java 写出具体实现的算法。2 有A,B,C三个秆子,A上有11个盘子,盘子大小不一样。现在要求把11个盘子移到b杆上。要求盘子大的放在下面
要求用java 写出具体实现的算法。
for(int i = 1; ;i ++ ){ //i为桌数
pNum = 11*i;
if(pNum%9==8 && pNum%7 ==6 &&pNum%5==4){
break;
}
}
如果一个桌子做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!";
}
如果一个桌子做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!";
}
非常感谢楼上的 嘿嘿
还有
二分查找法 用java 怎么写啊???
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);
}
}
}
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
{
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人
呵呵,第一种方法要玩叠罗汉了。
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);//请解释
}
}
}