java经典算法25题(1)

目录

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

题目2:判断101-200之间有多少个素数,并输出所有素数。     程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。

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

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

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

练习06:输入两个正整数m和n,求其最大公约数和最小公倍数。  在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0, 返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。

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

题目8:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

题目9: 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程     找出1000以内的所有完数。

题目10: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?


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

 public static void main(String[] args) {
        System.out.println("第1个月兔子总数为:1对");
        System.out.println("第2个月兔子总数为:1对");
        System.out.println("第3个月兔子总数为:2对");
        int sum = 2;
        int[] add = new int[30];
        add[0] = 1;
        add[1] = 2;
        for (int i = 2; i <= 28; i++) {
            add[i] = add[i - 2] + add[i - 1];
            sum += add[i-2];
            System.out.println("第" + (i + 2) + "个月兔子总数为:" + sum + "对");
        }
    }
//0 0 1 1 2 3 5 8 13每个月增加的兔子

 

题目2:判断101-200之间有多少个素数,并输出所有素数。 
    程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。

public static void main(String[] args) {
        int count=0;
        for (int i = 101; i <=200; i++) {
            int j;
            for ( j = 2; j <=i; j++) {
                if (i%j==0) {
                    break;
                }
                
            }
            if (i==j) {
                System.out.println(i);
                count++;
            }
            
        }
        System.out.println("101-200之间有"+count+"个素数");
    }

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

public static void main(String[] args) {
        System.out.println("水仙花数有:");
        for (int i = 100; i <1000; i++) {
            int geWei=i%10;
            int shiWei=i/10%10;
            int baiWei=i/100;
            if (geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei==i) {
                System.out.print(i+" ");
            }
        }
        
    }

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

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个不小于2的正整数n:");
        int n=sc.nextInt();
        while (n<2) {
            System.out.println("您的输入有误。请重新输入!");
            n=sc.nextInt();
        }
        System.out.print(n+"=");
        int k=2;
        do {
             
            if (n==k) {
                System.out.print(k);
                k+=1;
            }else if (n>k&&n%k==0) {
                System.out.print(k+"*");
                n=n/k;
            }else if (n%k!=0) {
                k=k+1;
            }
        } while (k<=n);
        
        sc.close();
    }


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

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入您的成绩:");
        int score=sc.nextInt();
        while (score<0||score>100) {
            System.out.println("您的输入有误,请重新输入");
            score=sc.nextInt();
        }
        String rate=score>=60?(score>=90?"A":"B"):"C";
        System.out.println("您的评级为:"+rate);
    }

练习06:输入两个正整数m和n,求其最大公约数和最小公倍数。  
在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0, 返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入正整数m:");
        int m=sc.nextInt();
        System.out.println("请输入正整数n:");
        int n=sc.nextInt();
        if(m>n){
            int temp=m;
                m=n;
                n=temp;
            
        }
        int product=m*n;
        do {
            int temp1=n;
            n=m%n;
            m=temp1;
            
        } while (n!=0);
        System.out.println("这两数最大公约数为:"+m);
        System.out.println("最小公约数为:"+(product/m));
    }

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

public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        System.out.println("请输入一串字符:");
        String str=sc.nextLine();
        char[] array=str.toCharArray();//字符串转字符 存入数组
        int ziMu=0;
        int number=0;
        int space=0;
        int other=0;
        for (int i = 0; i < array.length; i++) {
            if (array[i]>=48&&array[i]<=57) {
                number++;
            }else if ((array[i]>=65&&array[i]<=90)||(array[i]>=97&&array[i]<=122)) {
                ziMu++;
            }else if (array[i]==32) {
                space++;
            }else{
                other++;
            }
        }
        System.out.println("数字的个数是:"+number+"\t字母的个数是:"+ziMu+"\t空格的个数是"+space+"\t其他字符的个数是:"+other);
        sc.close();
    }

题目8:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入a的值:");
        int a=sc.nextInt();
        System.out.println("请输入有几个数字相加:");
        int n =sc.nextInt();
        String s=""+a;
        int b=a;
        int sum=0;
        for (int i = 1; i <=n; i++) {
            if (i>1) {
                s=s+"+"+a;
            }
            sum+=a;
            a=a*10+b;
        }
        System.out.println("s="+s+"="+sum);
        sc.close();
    }

题目9: 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程     找出1000以内的所有完数。

public static void main(String[] args) {
        
        System.out.println("1000以内所有完数有:");
        for (int i = 2; i <=1000; i++) {//1不是完数
            int sum=0;//每一次循环归0
            for (int j = 1; j <i; j++) {
                if (i%j==0) {
                    sum+=j;
                }
            }
            if (sum==i) {
                System.out.print(i+" ");
            }
        }
    }

题目10: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?

public static void main(String[] args) {
        double sum=0;
        double height=100;
        for (int i = 1; i <=10; i++) {
            sum+=height;//落下来
            height=height/2;
            sum+=height;//弹上去
        }
        sum-=height;//减去第10次弹起的高度
        System.out.println("第十次落地经过"+sum+"米");
        System.out.println("第十次反弹"+height+"米");
    }

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豪仔思密达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值