12道Java经典算法题(附带参考代码)

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

 //这是一个菲波拉契数列问题

public class test01 {
  public static void main(String[] args) {
   int f1=1,f2=1,f;
   int M=30;
   System.out.println(1);
   System.out.println(2);
   for(int i=3;i<m;i++) {
      f=f2;
      f2=f1+f2;
      f1=f;
      System.out.println(f2);
   }
 }
}

第二题:判断101-200之间有多少个素数,并输出所有素数。

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

public class test02 {
 public static void main(String[] args) {
  int count=0;
  for(int i=101;i<200;i+=2) {
   boolean flag=true;
    for(int j=2;j<=Math.sqrt(i);j++) {
       if(i%j==0) {
         flag=false;break;
       }
    }if(flag==true) {
        count++;
        System.out.println(i);
        }
  } 
  System.out.println(count);
 }
}

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

public class test03 {
   public static void main(String[] args) {
        int a,b,c;
        for(int i=101;i<1000;i++){
           a=i%10;
           b=i/10%10;
           c=i/100;
           if(a*a*a+b*b*b+c*c*c==i)
           System.out.println(i);
        }
   }
}

第四题:将一个正整数分解质因数。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

import java.util.Scanner;
public class test04 {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
        System.out.println("请输入正整数:");
        int n=sc.nextInt();
        int k=2;
        while(n>=k) {
            if(n==k) {
                System.out.println(k);
                break;
            }else if (n%k==0) {
                System.out.println(k);
                n=n/k;
            }else {
                k++;
            }
        }
    }
}

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

import java.util.Scanner;
public class test05 {  
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入成绩:");
        int score=sc.nextInt();
        char grade=score>=90?'A':score>=60?'B':'C';
        System.out.println(grade);
    }
}

第六题:输入两个正整数m和n,求其最大公约数和最小公倍数。

 /*在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。* /

import java.util.Scanner;
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入两个正整数:");
        int a=sc.nextInt();
        int b=sc.nextInt();
        DemoApplication test=new DemoApplication();
        int i = test.gongyinshu(a, b);
        System.out.println("最小公因数"+i);
        System.out.println("最大公倍数"+a*b/i);
    }

    public int gongyinshu(int a,int b) {
        if(a<b) {
            int t=b;
            b=a;
            a=t;
        }while(b!=0) {
            if(a==b)
                return a;
            int x=b;
            b=a%b;
            a=x;
        }
        return a;
    }
}

第七题:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。

例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

import java.util.Scanner;
public class test07 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入a:");
        int a=sc.nextInt();
        System.out.println("请输入n:");
        int n=sc.nextInt();
        int sum=0,b=0;
        for(int i=0;i<n;i++) {
            b+=a;
            sum+=b;
            a=a*10;
        }
        System.out.println(sum);
    }
}

第八题:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。

public class test08 {
   public static void main(String[] args) {
      for(int i=1;i<=1000;i++) {
         int t = 0;
         for(int j=1;j<=i/2;j++) {
           if(i%j==0) {
              t+=j;
           }
         }if(t==i) {
             System.out.println(i);
         }
      }
   }
}

第九题:有1、2、3、4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数?并把他们都输入。

public class test09 {
       public static void main(String[] args) {
              int count=0;
              for(int i=1;i<5;i++) {
                  for(int j=1;j<5;j++) {
                      for(int k=1;k<5;k++) {
                          if(i!=j&&j!=k&&i!=k) { 
                          count++;
                          System.out.println(i*100+j*10+k);
                          }
                       }
                   }
                }
             System.out.println(count);
         }
  }

第十题:输入三个整数x,y,z,请把这三个数由小到大输出。

import java.util.Scanner;
public class test10 {
     public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入3个整数:");
        int x = sc.nextInt();
        int y = sc.nextInt();
        int z = sc.nextInt();
        int i = 0;
        if(x>y){
            i=y;
            y=x;
            x=i;
        }
        if(x>z){
            i=z;
            z=x;
            x=i;
        }
        if(y>z){
            i=z;
            z=y;
            y=i;
        }
        System.out.println("从小到大排序后的结果:");
        System.out.println(x+"<"+y+"<"+z);
     }
}

第十一题:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

public class test11 {
    public static void main(String[] args) {
        int x=1;
        for(int i=10;i>1;i--) {
            x=(x+1)*2;
        }
        System.out.println(x);
    }
}

第十二题:打印出图案(菱形)

public class lingxi12 {
    public static void main(String[] args) {
         //控制菱形的行数(必须为奇数)
        int row = 9;
        for (int i = 1; i <= row / 2 + 1; i++) {//控制上半部分的行数
            for (int j = 1; j <= row / 2 + 1 - i; j++) {//控制" "的数量
                System.out.print(" ");
            }
            for (int k = 1; k <= 2 * i - 1; k++) {//控制" "的数量
                System.out.print("*");
            }
            //进行换行
            System.out.println();
        }
        for (int i = row / 2; i >= 1; i--) {//控制下半部分的行数
            for (int j = 1; j <= row / 2 + 1 - i; j++) {//控制" "的数量
                System.out.print(" ");
            }
            for (int k = 1; k <= 2 * i - 1; k++) {//控制" "的数量
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
原文链接:https://blog.csdn.net/m0_62051288/article/details/126891832
  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值