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);
        }   
    复制代码
  • 相关阅读:
    c# 执行windows模拟登录
    c#文件压缩解压
    c#文件上传下载功能实现
    .NET core3.1 使用Jwt保护api
    我所理解的闭包
    数组遍历for forEach for..in for..of
    变量提升
    微信小程序做radio,可以拖动进度条
    css:flex
    css常用布局
  • 原文地址:https://www.cnblogs.com/xiaohouzai/p/7271621.html
Copyright © 2011-2022 走看看