java面试算法_面试-java算法题

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

public static long fac(intn){if(n<=0) return 0;else if(n==1) return 1;else return n*fac(n-1);

}public static voidmain(String [] args) {

System.out.println(fac(6));

}

2.编写一个程序,有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

public static voidmain(String [] args) {inti, 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文件中用回车或空格进行分隔。

importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;public classtext{public static void main(String[] args) throwsException{

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

c.write(a[aIndex++] + "\n");if(bIndex

c.write(b[bIndex++] + "\n");

}while(bIndex

c.write(b[bIndex++] + "\n");

}

c.close();

}public static String[] getArrayByFile(String filename,char[] seperators) throwsException{

File f= newFile(filename);

FileReader reader= newFileReader(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];

}returnresults.split(regex);

}

}

4.639172每个位数上的数字都是不同的,且平方后所得数字的所有位数都不会出现组成它自身的数字。(639172*639172=408540845584),类似于639172这样的6位数还有几个?分别是什么?

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

public voidselectNum(){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(longn){

HashMap m=new HashMap();//存储的时候判断有无重复值

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,longn){

HashMap m=new HashMap();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 voidmain(String args[]){newtest().selectNum();

}

5.比如,968548+968545=321732732它的答案里没有前面两个数里的数字,有多少这样的6位数。

public voidselectNum(){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,intm){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 voidmain(String args[]){newtest().selectNum();

}

6.给定String,求此字符串的单词数量。字符串不包括标点,大写字母。例如 String str="hello world hello hi";单词数量为3,分别是:hello world hi。

public static voidmain(String [] args) {int count = 0;

String str="hello world hello hi";

String newStr="";

HashMap m=new HashMap();

String [] a=str.split(" ");for (int i=0;i

m.put(a[i],"1");

count++;

newStr=newStr+" "+a[i];

}

}

System.out.println("这段短文单词的个数是:"+count+","+newStr);

}

7.写出程序运行结果。

public classTest1 {private static void test(int[]arr) {for (int i = 0; i < arr.length; i++) {try{if (arr[i] % 2 == 0) {throw newNullPointerException();

}else{

System.out.print(i);

}

}catch(Exception e) {

System.out.print("a ");

}finally{

System.out.print("b ");

}

}

}public static voidmain(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 classTest1 {private static void test(int[]arr) {for (int i = 0; i < arr.length; i++) {try{if (arr[i] % 2 == 0) {throw newNullPointerException();

}else{

System.out.print(i);

}

}finally{

System.out.print("b ");

}

}

}public static voidmain(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 voidmain(String [] args) {

List countList=new ArrayList();intcount;

HashMapm;

String str;//读取键盘输入的一行(以回车换行为结束输入)

String[] a;

Scanner in=newScanner(System.in);while( !(str=in.nextLine()).equals("#") ){

a=str.split(" ");

m=new HashMap();

count= 0;for (int i=0;i

m.put(a[i],"1");

count++;

}

}

countList.add(count);

}sfor(intc:countList)

System.out.println(c);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值