JAVA算法题

来源:互联网 发布:app软件开发参考资料 编辑:程序博客网 时间:2024/06/08 13:15
代码下载地址;http://download.csdn.net/detail/cuiran/4061614 

 

 

1.使用Java语言编写代码,将一个正整数分解质因数,例如:输入90,打印输出90=2*3*3*5

代码:

/**

 * @Title: Test11.java

 * @Package com.cayden.test

 * @Description: TODO

 * Copyright: Copyright (c) 2012 

 * 

 * @author cuiran

 * @date 2012-2-13 下午08:46:17

 * @version V1.0

 */

package com.cayden.test;

import java.util.Scanner;

import java.util.Vector;

/**

 * @author cuiran

 *

 */

public class Test11 {

/**

 * @param args

 */

public static void main(String[] args){

    

      System.out.println("请你输入一个正整数:");

      Scanner sc=new Scanner(System.in);

      int Num=sc.nextInt();

     

      Vector<Integer>  vec=new Vector();

 Lab:for(int i=2;i<=Num;i++){

    for(int j=2;j<=i/2;j++){

  if(i%j==0&&i!=2){

     continue Lab;

  }

    }

    vec.add(i);

 }

     

 System.out.println(Num+"的分解结果是:\n");

 System.out.print(Num+"=");

 int theNum=Num;

 boolean help=true;

 for(int k=0;k<vec.size();k++){

    int qq=(int)vec.get(k);

    if(theNum<qq)

  break;

    if(theNum%qq==0){

  if(help==true){

     System.out.print(qq);

     help=false;

  }else{

     System.out.print("*"+qq);

  }

  k--;

  theNum=theNum/qq;

    }

 }

 System.out.println("\n分解完毕!");

   }

2.题目如下:用122345这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234412345等,要求:"4"不能在第三位,"3""5"不能相连。 

/**

 * @Title: ATest.java

 * @Package com.cayden.test

 * @Description: TODO

 * Copyright: Copyright (c) 2012 

 * 

 * @author cuiran

 * @date 2012-2-13 下午09:22:00

 * @version V1.0

 */

package com.cayden.test;

/**

 * @author cuiran

 *

 */

public class ATest{

    private static boolean is1Or5(char a,char b){

        if(a=='3' && b=='5')return true;

        if(a=='5' && b=='3')return true;

        return false;

    }

    

    private static int countOf2(char[] num,int index){

        int n=0;

        for(int i=0;i<index;i++){

            if(num[i]=='2')n++;

        }

        return n;

    }

    

    private static boolean hasSameNumber(int index,char a, char[] num){

        for(int i=0;i<index;i++){

            if(num[i]==a)return true;

        }

        return false;

    }

    

    public static int testArrange(char[] number,char[] num,int index){

        int size = 0;//组合的个数

        int pos1=1,pos2=2;//该变量为重复的2的数组位置,可以提取出来作为参数

        int emp = countOf2(num,index);//得到当前的数组中有几个2

        for(int i=0;i<num.length;i++){

            if(number[i]=='2'){//当前的数字为2

                if(emp >= 2){//数组中2的个数多于2个

                    continue;

                }else if(emp == 1){//数组中有一个2时,要求当前的2不能为位置1的2

                    if(i==pos1)continue;

                }else{

                    if(i==pos2)continue;//数组中没有2时,要求当前的2不能为位置2的2

                }

            }else{

                if(index==2 && number[i]=='4')continue;//去除4

                if(index>0 && is1Or5(num[index-1],number[i]))continue;//去除相邻的3和5

                if(hasSameNumber(index,number[i], num))continue;//去除重复数字

            }

            num[index] = number[i];

            if(index==5){

                System.out.println(num);

                size++;

            }else{

                size = size + testArrange(number,num,index+1);

            }

        }

        return size;

    }

    

    public static void aTest(){

        char[] number = {'1','2','2','3','4','5'};

        char[] num = new char[number.length];

        int size =0;

        size = testArrange(number,num,0);

        System.out.println("size="+size);

    }

    

    public static void main(String[] args) {

        aTest();

    }

}

3.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"ABC"4,应该截为"AB",输入"ABCDEF"6,应该输出为"ABC"而不是"ABC+汉的半个"

/**

 * @Title: Test3.java

 * @Package com.cayden.test

 * @Description: TODO

 * Copyright: Copyright (c) 2012 

 * 

 * @author cuiran

 * @date 2012-2-13 下午09:29:08

 * @version V1.0

 */

package com.cayden.test;

/**

 * @author cuiran

 * 根据编码来进行判断

 */

public class Test3 {

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

        

        String a = "我ABC汉DEF" ;  

        int len = 6 ;  

        String encoding = "UTF-8" ;  

          

        System.out.println( getSubString(a, len,encoding) );  

        a = "我ABC";  

        len = 4 ;  

        encoding = "gbk" ;  

        System.out.println( getSubString(a, len,encoding) );  

    }  

      

    /** 

     *  

     * @param str 传入字符串 

     * @param len 截取字节数 

     * @param encoding 编码方式 

     * @return 返回截取后的字符串 

     * @throws Exception 

     */  

    public static String getSubString(String str,int len,String encoding) throws Exception{  

        if(str == null || str.length()<1) return null ;  

        if(len<1) return null ;  

        StringBuffer sb = new StringBuffer();  

        int all = 0 ;  

        for(int i=0;i<str.length();i++){  

            String tmp = str.substring(i,i+1);  

            sb.append(tmp);  

            byte[] tmpB = tmp.getBytes(encoding);  

            all +=tmpB.length ;  

            if(all>=len){  

                break ;  

            }  

        }  

        return sb.toString() ;  

    }  

}  

4. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

/**

 * @Title: Test4.java

 * @Package com.cayden.test

 * @Description: TODO

 * Copyright: Copyright (c) 2012 

 * 

 * @author cuiran

 * @date 2012-2-13 下午09:35:38

 * @version V1.0

 */

package com.cayden.test;

/**

 * @author cuiran

 *

 */

public class Test4 {

/**

 * @param args

 */

public static void main(String[] args) {

 long f1 = 1L, f2 = 1L;

   long f;

   for(int i=3; i<20; i++) {

    f = f2;

    f2 = f1 + f2;

    f1 = f;

    System.out.print("第" + i +"个月的兔子对数: ");

    System.out.println(" " + f2);

   }

}

}

5.打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个水仙花数,因为153=1的三次方+5的三次方+3的三次方

/**

 * @Title: Flower.java

 * @Package com.cayden.test

 * @Description: TODO

 * Copyright: Copyright (c) 2012 

 * 

 * @author cuiran

 * @date 2012-2-13 下午09:52:36

 * @version V1.0

 */

package com.cayden.test;

/**

 * @author cuiran

 *

 */

public class Flower {

/**

 * @param args

 */

public static void main(String[] args) {

int f1=0;

int f2=0;

int f3=0;

for(int i=100;i<1000;i++){

f1=i%10;

f2=i/10%10;

f3=i/100;

if(i==f1*f1*f1+f2*f2*f2+f3*f3*f3){

System.out.println(i);

}

}

}

}