您的位置:

java经典算法七题,Java经典算法题

本文目录一览:

java算法题——龟兔赛跑

public class Test1{

public static void main(String[] args) throws InterruptedException {

   int v1=25,v2=10,t=20,s=3,l=100;

          

          

         Scanner scanner=new Scanner(System.in);

           

         v1=scanner.nextInt();    

          v2=scanner.nextInt();

         t=scanner.nextInt();

         s=scanner.nextInt();

         l=scanner.nextInt();

          

         int sum1=0,sum2=0;

         boolean stop=false;

         int stopcount=0;

         int i=0;

         for ( i = 0; i  l/v2; i++) {

             

          

          if(sum1=l||sum2=l)//如果有一个跑到了终点就结束了

          break;

          

             if(stopcount==s)

                 stop=false; //如果休息的时间够了,就开始跑

              

              

             if(sum1-sum2=t)

                 stop=true; //如果超过了t米,就休息

              

              

             if(!stop)

                sum1+=v1; //当兔子不休息的时候跑

             else

                 stopcount++; //休息的时间计数

              

             sum2+=v2;//乌龟每次都会跑

              

              

             System.out.print("兔子跑了:"+sum1+"米");

             System.out.println("乌龟跑了:"+sum2+"米");

        }

         if(sum1==sum2)

             System.out.println("D"+i);

         else if(sum1=l)

             System.out.println("R"+i);

         else if(sum2=l)

             System.out.println("T"+i);

}

}

Java的数组的几种经典算法

JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法、冒泡法、选择排序法、插入排序法。

快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现。

冒泡法是运用遍历数组进行比较,通过不断的比较将最小值或者最大值一个一个的遍历出来。

选择排序法是将数组的第一个数据作为最大或者最小的值,然后通过比较循环,输出有序的数组。

插入排序是选择一个数组中的数据,通过不断的插入比较最后进行排序。下面我就将他们的实现方法一一详解供大家参考。

1利用Arrays带有的排序方法快速排序

public class Test2{ public static void main(String[] args){ int[] a={5,4,2,4,9,1}; Arrays.sort(a); //进行排序 for(int i: a){ System.out.print(i); } } }

2冒泡排序算法

public static int[] bubbleSort(int[] args){//冒泡排序算法 for(int i=0;iargs.length-1;i++){ for(int j=i+1;jargs.length;j++){ if (args[i]args[j]){ int temp=args[i]; args[i]=args[j]; args[j]=temp; } } } return args; }

3选择排序算法

public static int[] selectSort(int[] args){//选择排序算法 for (int i=0;iargs.length-1 ;i++ ){ int min=i; for (int j=i+1;jargs.length ;j++ ){ if (args[min]args[j]){ min=j; } } if (min!=i){ int temp=args[i]; args[i]=args[min]; args[min]=temp; } } return args; }

4插入排序算法

public static int[] insertSort(int[] args){//插入排序算法 for(int i=1;iargs.length;i++){ for(int j=i;j0;j--){ if (args[j]args[j-1]){ int temp=args[j-1]; args[j-1]=args[j]; args[j]=temp; }else break; } } return args; }

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

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!=jk!=ji!=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(aIndexa.length){

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

if(bIndexb.length)

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

}

while(bIndexb.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){

HashMapLong,String m=new HashMapLong,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){

HashMapLong,String m=new HashMapLong,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="";

HashMapString,String m=new HashMapString,String();

String [] a=str.split(" "); for (int i=0;ia.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) {

ListInteger countList=new ArrayListInteger(); int count;

HashMapString,String m;

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

Scanner in=new Scanner(System.in);

while( !(str=in.nextLine()).equals("#") ){

a=str.split(" ");

m=new HashMapString,String();

count = 0; for (int i=0;ia.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);

}

java经典算法题——猴子吃桃

public class Monkey

{

public static void main(String[] args)

{

int sum=0,remain=1;

//每天吃剩的桃子加一个正好是前一天桃子的一半,每天桃子的总数就是前一天剩下桃子的数量

for(int day=9;day=1;day--)

{

sum=(remain+1)*2;

remain=sum;

System.out.println("第"+day+"天还剩"+remain+"个桃子");

}

System.out.println(sum);

}

}

求 Java 一些经典例子算法

//前n项阶乘分之一的和

public class jiecheng {

public static void main(String[] args)

{

double sum=0;

double j=1;

int n=10;

for(int i=1;i=10;i++)

{

j=j*i;

sum=1/j+sum;

}

System.out.println("前"+n+"项阶乘的和为:"+sum);

}

}