zoukankan      html  css  js  c++  java
  • 面试-java算法题

    1.编写一个程序,输入n,求n!(用递归的方式实现)。

    复制代码
    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个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

    按 Ctrl+C 复制代码
    按 Ctrl+C 复制代码

     3.编写一个程序,将text1.txt文件中的单词与text2.txt文件中的单词交替合并到text3.txt文件中。text1.txt文件中的单词用回车符分隔,text2.txt文件中用回车或空格进行分隔。

    复制代码
    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[]{'
    '});  
            String[] b = getArrayByFile("text2.txt",new char[]{'
    ',' '});        
            FileWriter c = new FileWriter("text3.txt"); 
            int aIndex=0;
            int bIndex=0;         
    
            while(aIndex<a.length){  
                c.write(a[aIndex++] + "
    ");    
                if(bIndex<b.length)  
                    c.write(b[bIndex++] + "
    "); 
            }  
              
            while(bIndex<b.length){  
                c.write(b[bIndex++] +  "
    "); 
            }     
            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位数还有几个?分别是什么?

    这题采用的HashMap结构判断有无重复,也可以采用下题的数组判断。

    按 Ctrl+C 复制代码
    按 Ctrl+C 复制代码

     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.写出程序运行结果。

    复制代码
    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 5b

    复制代码
    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 c

    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);
        }   
    复制代码
  • 相关阅读:
    CF 461B Appleman and Tree
    POJ 1821 Fence
    NOIP 2012 开车旅行
    CF 494B Obsessive String
    BZOJ2337 XOR和路径
    CF 24D Broken robot
    POJ 1952 BUY LOW, BUY LOWER
    SPOJ NAPTIME Naptime
    POJ 3585
    CF 453B Little Pony and Harmony Chest
  • 原文地址:https://www.cnblogs.com/xiaohouzai/p/7271621.html
Copyright © 2011-2022 走看看