面试-java算法题

来源:互联网 发布:网络对战平台 编辑:程序博客网 时间:2024/06/05 17:01

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

复制代码
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文件中用回车或空格进行分隔。

复制代码
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位数还有几个?分别是什么?

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

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

复制代码
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);    }   
0 0
原创粉丝点击