这个是我面试的时候的两个面试的题,求各位能够帮帮忙
1,有一个房间,其中里面的桌子,每次可以做奇数个人。
如果一个桌子做3个人,那么剩余2个人。
如果做5个人,那么剩余4个人
如果做7个人,那么剩余6个人如果做9个人,那么剩余8个人
如果做11个人 那么就正好做满
求一共有多少个人
要求用java 写出具体实现的算法。2 有A,B,C三个秆子,A上有11个盘子,盘子大小不一样。现在要求把11个盘子移到b杆上。要求盘子大的放在下面
要求用java 写出具体实现的算法。

解决方案 »

  1.   

    int pNum ;//pNum为人数
    for(int i = 1; ;i ++ ){  //i为桌数
       pNum = 11*i;
       if(pNum%9==8 && pNum%7 ==6 &&pNum%5==4){
         break;
       }
    }
      

  2.   

    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!";
    }
      

  3.   

    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!"; 
    }
      非常感谢楼上的 嘿嘿
      

  4.   

    汉诺塔用 java  怎么写啊 ??
    还有 
    二分查找法  用java  怎么写啊???
      

  5.   

    汉诺塔:
    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);
    }
    }
    }
      

  6.   

    二分查找法:
    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
      

  7.   

    依照这个理解,跟前面大家提到的方法一起比较下: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人
    呵呵,第一种方法要玩叠罗汉了。
      

  8.   

    谁能解释一下下面的语句
    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);//请解释
    }
    }
    }