面試-java算法題

1.編寫一個程序,輸入n,求n!(用遞歸的方式實現)。java

public static long fac(int n){
        if(n<=0) return 0;
        else if(n==1)    return 1;
        else return n*fac(n-1);
    }
    public static void main(String [] args) {
        System.out.println(fac(6));
    }

2.編寫一個程序,有1,2,3,4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?數組

public static void main(String [] args) {
       int i, j, k;
       int m=0;
       for(i=1;i<=4;i++)
          for(j=1;j<=4;j++)
            for(k=1;k<=4;k++){
               if(i!=j&&k!=j&&i!=k){
                 System.out.println(""+i+j+k);
                 m++;
               }
            }
        System.out.println("能組成:"+m+"個");
}

 3.編寫一個程序,將text1.txt文件中的單詞與text2.txt文件中的單詞交替合併到text3.txt文件中。text1.txt文件中的單詞用回車符分隔,text2.txt文件中用回車或空格進行分隔。spa

import java.io.File;  
import java.io.FileReader;  
import java.io.FileWriter;  
  
public class text{  
    public static void main(String[] args) throws Exception{  
        String[] a = getArrayByFile("text1.txt",new char[]{'\n'});  
        String[] b = getArrayByFile("text2.txt",new char[]{'\n',' '});        
        FileWriter c = new FileWriter("text3.txt"); 
        int aIndex=0;
        int bIndex=0;         

        while(aIndex<a.length){  
            c.write(a[aIndex++] + "\n");    
            if(bIndex<b.length)  
                c.write(b[bIndex++] + "\n"); 
        }  
          
        while(bIndex<b.length){  
            c.write(b[bIndex++] +  "\n"); 
        }     
        c.close();  
    }  

     public static String[] getArrayByFile(String filename,char[] seperators) throws Exception{  
        File f = new File(filename);  
        FileReader reader = new FileReader(f);  
        char[] buf = new char[(int)f.length()];  
        int len = reader.read(buf);  
        String results = new String(buf,0,len);  
        String regex = null;  
        if(seperators.length >1 ){  
            regex = "" + seperators[0] + "|" + seperators[1];  
        }else{  
            regex = "" + seperators[0];  
        }  
        return  results.split(regex);  
    }  
      
}  

4.639172每一個位數上的數字都是不一樣的,且平方後所得數字的全部位數都不會出現組成它自身的數字。(639172*639172=408540845584),相似於639172這樣的6位數還有幾個?分別是什麼?code

這題採用的HashMap結構判斷有無重複,也能夠採用下題的數組判斷。blog

public void selectNum(){  
        for(long n = 100000; n <= 999999;n++){   
            if(isSelfRepeat(n))                    //有相同的數字,則跳過
                continue;   
            else if(isPingFangRepeat(n*n,n)){    //該數的平方中是否有與該數相同的數字
                continue;   
            }
            else{                                //符合條件,則打印
                   System.out.println(n); 
            }   
        } 
     }

    public boolean isSelfRepeat(long n){
        HashMap<Long,String> m=new HashMap<Long,String>();
        //存儲的時候判斷有無重複值
        while(n!=0){
            if(m.containsKey(n%10)){
                return true;
            }
            else{
                m.put(n%10,"1");
            }
            n=n/10;
        }
        return false;
    }

    public boolean isPingFangRepeat(long pingfang,long n){
        HashMap<Long,String> m=new HashMap<Long,String>();
        while(n!=0){
            m.put(n%10,"1");
            n=n/10;
        }

        while(pingfang!=0){
            if(m.containsKey(pingfang%10)){
                return true;
            }
            pingfang=pingfang/10;
        }
        return false;
    }

    public static void main(String args[]){
        new test().selectNum();
    }

 5.好比,968548+968545=321732732它的答案裏沒有前面兩個數裏的數字,有多少這樣的6位數。遞歸

 public void selectNum(){  
        for(int n = 10; n <= 99;n++){ 
            for(int m = 10; m <= 99;m++){
                if(isRepeat(n,m)){
                    continue;
                }
                else{
                    System.out.println("組合是"+n+","+m);
                }
            }
        }
     }

    public boolean isRepeat(int n,int m){
        int[] a={0,0,0,0,0,0,0,0,0,0};
        int s=n+m;
        while(n!=0){
            a[n%10]=1;
            n=n/10;
        }

        while(m!=0){
            a[m%10]=1;
            m=m/10;
        }

        while(s!=0){
            if(a[s%10]==1){
                return true;
            }
            s=s/10;
        }
        return false;
    }

    public static void main(String args[]){
        new test().selectNum();
    }   

6.給定String,求此字符串的單詞數量。字符串不包括標點,大寫字母。例如 String str="hello world hello hi";單詞數量爲3,分別是:hello world hi。字符串

 public static void main(String [] args) {
            int count = 0;
            String str="hello world hello hi";
            String newStr="";
            HashMap<String,String> m=new HashMap<String,String>();
            String [] a=str.split(" ");
            for (int i=0;i<a.length;i++){
                if(!m.containsKey(a[i])){
                    m.put(a[i],"1");
                    count++;
                    newStr=newStr+" "+a[i];
                }
            }
            System.out.println("這段短文單詞的個數是:"+count+","+newStr);
    }   

7.寫出程序運行結果。get

public class Test1 {
    private static void test(int[]arr) {
        for (int i = 0; i < arr.length; i++) {
            try {
                if (arr[i] % 2 == 0) {
                    throw new NullPointerException();
                } else {
                    System.out.print(i);
                }
            }
            catch (Exception e) {
                System.out.print("a ");
            }
            finally {
                System.out.print("b ");
            }
        }
    }
 
    public static void main(String[]args) {
        try {
            test(new int[] {0, 1, 2, 3, 4, 5});
        } catch (Exception e) {
            System.out.print("c ");
        }
    }
 
}

運行結果:a b 1b a b 3b a b 5bit

public class Test1 {
    private static void test(int[]arr) {
        for (int i = 0; i < arr.length; i++) {
            try {
                if (arr[i] % 2 == 0) {
                    throw new NullPointerException();
                } else {
                    System.out.print(i);
                }
            }
            
            finally {
                System.out.print("b ");
            }
        }
    }
 
    public static void main(String[]args) {
        try {
            test(new int[] {0, 1, 2, 3, 4, 5});
        } catch (Exception e) {
            System.out.print("c ");
        }
    }
 
}

運行結果:b cio

8.單詞數

 統計一篇文章裏不一樣單詞的總數。

Input

  有多組數據,每組一行,每組就是一篇小文章。每篇小文章都是由小寫字母和空格組成,沒有標點符號,遇到#時表示輸入結束。

Output

  每組值輸出一個整數,其單獨成行,該整數表明一篇文章裏不一樣單詞的總數。

Sample Input

you are my friend

#

 

Sample Output

4

public static void main(String [] args) {
            List<Integer> countList=new ArrayList<Integer>();
            int count;
            HashMap<String,String> m;
            String str;  //讀取鍵盤輸入的一行(以回車換行爲結束輸入)
            String[] a;

            Scanner in=new Scanner(System.in);
            
            while( !(str=in.nextLine()).equals("#") ){
                a=str.split(" ");
                m=new HashMap<String,String>();
                count = 0;
                for (int i=0;i<a.length;i++){
                    if(!m.containsKey(a[i]) && (!a[i].equals(""))){
                        m.put(a[i],"1");
                        count++;
                    }
                }
                countList.add(count);
            }s

            for(int c:countList) 
                    System.out.println(c);
    }   
相關文章
相關標籤/搜索