• 中文
    • English
  • 注册
  • 查看作者
  • java面试之经典算法篇

    Java经典算法

    【示例1】题目:判断101-200之间有多少个素数,并输出所有素数。

    1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,

    则表明此数不是素数,反之是素数。

    public class exp2{ public static void main(String args[]){ int i=0;

    math mymath = new math(); for(i=2;i<=200;i++) if(mymath.iszhishu(i)==true)

    System.out.println(i);

    }

    }class math

    { public int f(int x)

    { if(x==1 || x==2) return 1; else

    return f(x-1)+f(x-2);

    }public boolean iszhishu(int x)

    { for(int i=2;i<=x/2;i++) if (x % 2==0 ) return false; return true;

    }

    }

    【示例2】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不

    死,问每个月的兔子总数为多少?

    1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21….

    public class exp2{ public static void main(String args[]){ int i=0; for(i=1;i<=20;i++)

    System.out.println(f(i));

    }public static int f(int x)

    { if(x==1 || x==2) return 1; else

    return f(x-1)+f(x-2);

    }

    }

    public class exp2{ public static void main(String args[]){ int i=0;

    math mymath = new math(); for(i=1;i<=20;i++)

    System.out.println(mymath.f(i));

    }

    }class math

    { public int f(int x)

    { if(x==1 || x==2) return 1; else

    return f(x-1)+f(x-2);

    }

    }

    【示例3】题目:打印出所有的 “水仙花数 “,所谓 “水仙花数 “是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 “水仙花

    数 “,因为153=1的三次方+5的三次方+3的三次方。

    1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

    public class exp2{

    public static void main(String args[]){ int i=0;

    math mymath = new math(); for(i=100;i<=999;i++) if(mymath.shuixianhua(i)==true)

    System.out.println(i);

    }

    }class math

    { public int f(int x)

    { if(x==1 || x==2) return 1; else

    return f(x-1)+f(x-2);

    }public boolean iszhishu(int x)

    { for(int i=2;i<=x/2;i++) if (x % 2==0 ) return false; return true;

    }public boolean shuixianhua(int x)

    { int i=0,j=0,k=0;

    i=x / 100;

    j=(x % 100) /10;

    ik=fx % 10; (x==i
    i
    i+j
    j
    j+k
    k
    k) return true; else

    return false;

    }

    }

    【示例4】题目:将一个正整数分解质因数。例如:输入90,打印出90=2
    3
    3*5。

    程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

    (2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你,重复执行第一步。

    (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

    public class exp2{ public exp2(){} public void fengjie(int n){ for(int i=2;i<=n/2;i++){ if(n%i==0){

    System.out.print(i+”*”);

    fengjie(n/i);

    }

    }

    System.out.print(n);

    System.exit(0);///不能少这句,否则结果会出错

    }public static void main(String[] args){

    String str=””;

    exp2 c=new exp2();

    str=javax.swing.JOptionPane.showInputDialog(“请输入N的值(输入exit退出):”);

    int N;

    Nt=r0y;{

    N=Integer.parseInt(str);

    }catch(NumberFormatException e){

    e.printStackTrace();

    }

    System.out.print(N+”分解质因数:”+N+”=”);

    c.fengjie(N);

    }

    }

    【示例5】题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

    1.程序分析:(a> b)?a:b这是条件运算符的基本例子。

    import javax.swing.*; public class ex5 { public static void main(String[] args){

    String str=””;

    str=JOptionPane.showInputDialog(“请输入N的值(输入exit退出):”);

    int N;

    Nt=r0y;{

    N=Integer.parseInt(str);

    ca}tch(NumberFormatException e){

    e.printStackTrace();

    }

    str=(N>90?”A”:(N>60?”B”:”C”));

    System.out.println(str);

    }

    }

    【示例6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

    1.程序分析:利用辗除法。

    最大公约数:

    public class CommonDivisor{ public static void main(String args[])

    { commonDivisor(24,32);

    }static int commonDivisor(int M, int N)

    { if(N<0||M<0)

    {

    Sryesttuermn.out.println(“ERROR!”); -1;

    }if(N==0)

    {

    rSeytsutrenm.out.println(“the biggest common divisor is :”+M); M;

    }return commonDivisor(N,M%N);

    }

    }

    最小公倍数和最大公约数:

    import java.util.Scanner; public class CandC

    {

    //下面的方法是求出最大公约数

    public static int gcd(int m, int n)

    {while (true)

    {if ((m = m % n) == 0) return n; if ((n = n % m) == 0) return m;

    }}

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

    {

    //取得输入值

    //Scanner chin = new Scanner(System.in);

    /i/ntint a = chin.nextInt(), b = chin.nextInt(); a=23; int b=32; int c = gcd(a, b);

    System.out.println(“最小公倍数:” + a * b / c + “\n最大公约数:” + c);

    }}

    【示例7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    1.程序分析:利用while语句,条件为输入的字符不为 ‘\n ‘.

    import java.util.Scanner; public class ex7 { public static void main(String args[])

    {

    System.out.println(“请输入字符串:”);

    Scanner scan=new Scanner(System.in);

    String str=scan.next();

    String E1=”[\u4e00-\u9fa5]”;

    Sintrting E2=”[a-zA-Z]”; countH=0; int countE=0; char[] arrChar=str.toCharArray();

    String[] arrStr=new String[arrChar.length]; for (int i=0;i2)/
    如果是闰年且月份大于2,总天数应该加一天
    /

    sum++;

    System.out.println(“It is the the day:”+sum);

    }

    }

    【示例15】题目:输入三个整数x,y,z,请把这三个数由小到大输出。

    1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x> y则将x与y的值进行交换,然后再用x与z进行比较,如果x> z则

    将x与z的值进行交换,这样能使x最小。

    import java.util.*; public class test { public static void main (String[]args){ int i=0; int j=0; int k=0; int x=0;

    System.out.print(“请输入三个数\n”);

    Scanner input = new Scanner(System.in);

    i=input.nextInt();

    j=input.nextInt();

    k=iifnput.nextInt(); (i>j)

    {

    x=i;

    i=j;

    j=x;

    }if(i>k)

    {

    x=i;

    i=k;

    k=x;

    }if(j>k)

    {

    x=j;

    j=k;

    k=x;

    }

    System.out.println(i+”, “+j+”, “+k);

    }

    }

    【示例16】题目:输出9*9口诀。

    1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

    public class jiujiu { public static void main(String[] args)

    { int i=0; int j=0; for(i=1;i<=9;i++)

    { for(j=1;j<=9;j++)

    System.out.print(i+”
    “+j+”=”+i
    j+”\t”);

    System.out.println();

    }

    }}

    不出现重复的乘积(下三角)

    public class jiujiu { public static void main(String[] args)

    { int i=0; int j=0; for(i=1;i<=9;i++)

    { for(j=1;j<=i;j++)

    System.out.print(i+”
    “+j+”=”+i
    j+”\t”);

    System.out.println();

    }

    }}

    上三角

    public class jiujiu { public static void main(String[] args)

    { int i=0; int j=0; for(i=1;i<=9;i++)

    { for(j=i;j<=9;j++)

    System.out.print(i+”
    “+j+”=”+i
    j+”\t”);

    System.out.println();

    }

    }}

    【示例17】题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,

    又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

    1.程序分析:采取逆向思维的方法,从后往前推断。

    public class 猴子吃桃 {

    static int total(int day){ if(day == 10){ return 1;

    }else{ return (total(day+1)+1)*2;

    }

    public s}tatic void main(String[] args)

    {

    System.out.println(total(1));

    }}

    【示例18】题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名

    单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

    1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。

    import java.util.ArrayList; public class pingpang {

    pSutbrliincg sat,abt,icc; void main(String[] args) {

    String[] op = { “x”, “y”, “z” };

    ArrayList arrayList=new ArrayList(); for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) for (int k = 0; k < 3; k++) {

    pingpang a=new pingpang(op[i],op[j],op[k]); if(!a.a.equals(a.b)&&!a.b.equals(a.c)&&!a.a.equals(“x”)

    &&!a.c.equals(“x”)&&!a.c.equals(“z”)){

    arrayList.add(a);

    }

    for}(Object a:arrayList){

    System.out.println(a);

    }

    }public pingpang(String a, String b, String c) { super(); this.a = a; this.b = b; this.c = c;

    }

    @pOubvelircride String toString() {

    // TODO Auto-generated method stub

    return “a的对手是”+a+”,”+”b的对手是”+b+”,”+”c的对手是”+c+”\n”;

    }

    }

    【示例19】题目:打印出如下图案(菱形)

  • 0
  • 0
  • 0
  • 31
  • 请登录之后再进行评论

    登录
  • 任务
  • 实时动态
  • 发布
  • 单栏布局 侧栏位置: