Java面試之旅——java算法篇之面試題目

 

 

求最大公約數和最小公倍數

  1. /** 
  2.  * 求最大公約數和最小公倍數 
  3.  */  
  4. public class Convention {  
  5.     /** 
  6.      * 求兩數的最大公約數 
  7.      */  
  8.     int divisor(int m,int n){   
  9.         if(m%n==0){  
  10.            return n;  
  11.        }else{  
  12.            return divisor(n,m%n);  
  13.        }  
  14.     }  
  15.     /** 
  16.      * 求兩數的最小公倍數 
  17.      */  
  18.     int gbs(int a,int b){  
  19.         int gbs = 0;  
  20.         gbs = a*b/divisor(a,b);  
  21.         return gbs;  
  22.     }  
  23. }  

 

求一組數組的衆數

  1. public static double mode(double[] array) {
  2.  Arrays.sort(array);
  3. int count = 1;
  4. int longest = 0;
  5. double mode = 0;
  6. for (int i = 0; i < array.length - 1; i++) {
  7. if (array[i] == array[i + 1]) {
  8. count++;
  9. } else {
  10. count = 1;//如果不等於,就換到了下一個數,那麼計算下一個數的次數時,count的值應該重新符值爲一
  11. continue;
  12. }
  13. if (count > longest) {
  14. mode = array[i];
  15. longest = count;
  16. }
  17. }
  18. System.out.println(longest);//打印出這個數出現的次數已判斷是否正確
  19. return mode;

    公司筆試題就1個,要求在10分鐘內作完。

    題目如下:用1、2、2、3、4、5這六個數字,用java寫一個main函數,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"與"5"不能相連。

 

  1. package test;
    /**
     * 用1,2,2,3,4,5,這六個數字,用java寫一個main函數,打印出所有不同的排列,如:512234,412345等,要求:“4”不能排第3位,“1”與“5”不能相連。
     * 
    @author kafka0102
     *
     
    */

    public class ATest {

        
    private static boolean is1Or5(char a,char b){
            
    if(a=='1' && b=='5')return true;
            
    if(a=='5' && b=='1')return true;
            
    return false;
        }

        
        
    private static int countOf2(char[] num,int index){
            
    int n=0;
            
    for(int i=0;i<index;i++){
                
    if(num[i]=='2')n++;
            }

            
    return n;
        }

        
        
    private static boolean hasSameNumber(int index,char a, char[] num){
            
    for(int i=0;i<index;i++){
                
    if(num[i]==a)return true;
            }

            
    return false;
        }

        
        
    public static int testArrange(char[] number,char[] num,int index){
            
    int size = 0;//組合的個數
            int pos1=1,pos2=2;//該變量爲重複的2的數組位置,可以提取出來作爲參數
            int emp = countOf2(num,index);//得到當前的數組中有幾個2
            for(int i=0;i<num.length;i++){
                
    if(number[i]=='2'){//當前的數字爲2
                    if(emp >= 2){//數組中2的個數多於2個
                        continue;
                    }
    else if(emp == 1){//數組中有一個2時,要求當前的2不能爲位置1的2
                        if(i==pos1)continue;
                    }
    else{
                        
    if(i==pos2)continue;//數組中沒有2時,要求當前的2不能爲位置2的2
                    }

                }
    else{
                    
    if(index==2 && number[i]=='4')continue;//去除4
                    if(index>0 && is1Or5(num[index-1],number[i]))continue;//去除相鄰的1和5
                    if(hasSameNumber(index,number[i], num))continue;//去除重複數字
                }

                num[index] 
    = number[i];
                
    if(index==5){
                    System.out.println(num);
                    size
    ++;
                }
    else{
                    size 
    = size + testArrange(number,num,index+1);
                }

            }

            
    return size;
        }

        
        
    public static void aTest(){
            
    char[] number = {'1','2','2','3','4','5'};
            
    char[] num = new char[number.length];
            
    int size =0;
            size 
    = testArrange(number,num,0);
            System.out.println(
    "size="+size);
        }

        
        
    public static void main(String[] args) {
            aTest();
        }


    }

 

 

 

有一個String s="SDsBEaA"
要求產生這樣的結果:s="AaBDESs"

 

 

public class MySort {

        public static void main(String[] args) {
                List<Character> result = new ArrayList<Character>();
                String s = "SDsBEAa";

                char[] strArray = s.toCharArray();
                // strArray = ABDESas
                Arrays.sort(strArray);
                for (int i = 97; i < 122; i++) {
                        char tempLowCase = (char) i;
                        char tempUpperCase = (char) (i - 32);
                        for (int j = 0; j < strArray.length; j++) {
                                if (Character.isUpperCase(strArray[j])) {
                                        if (tempUpperCase == strArray[j]) {
                                                result.add(tempUpperCase);
                                        }
                                }

                                if (tempLowCase == strArray[j]) {
                                        result.add(strArray[j]);
                                }
                        }
                }

                System.out.println(result);

        }
}

 





 

 
 
 
 

本文部分代碼摘自:

http://ravi.iteye.com/blog/122255(最大公約數)

http://www.blogjava.net/kafka0102/archive/2007/03/13/103434.html(數字組合)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章