斐波拉契数_输出101~200之间的所有质数_输出所有的水仙花数_将一个正整数分解为质因数等式_使用三目运算符输出成绩

本章包含五种新手学习的算法(本人目前还不太擅长集合的使用,之后可能会优化算法)

public class WorkSpace {

    public static void main(String args[]){

        System.out.println("1. 斐波拉契数: " + Fibonacci(40));//输出提示语和使用方法后得到的结果

        System.out.print("2. 101-200之间的质数: ");//输出提示语
        Prime();//方法没有返回值,直接调用就能输出结果

        System.out.print("3. 所有的水仙花数: ");//输出提示语
        Daffodil();//方法没有返回值,直接调用就能输出结果

        System.out.println("4. 将一个正整数分解质因数: " + PrimeFactors(17865));//输出提示语和使用方法后得到的结果
        ;

        System.out.println("5. 成绩水平: " + score(90));//输出提示语和使用方法后得到的结果

    }

    //斐波拉契数
    public static long Fibonacci(int n){

        if(n < 1){//检查输入的数是否比1还小
            return -1;//返回-1
        }
        if(n == 1 | n == 2){//检查数字是否是1或者2
            return 1;//返回1
        }
        long a = 1L;long b = 1L;long c = 0L;//定义a为初始第一变量,b为第二回合变量,c为最终结果
        for (int i = 0; i < n - 2; i++) {//循环n-2次
            c = a + b;//最终结果等于初始变量加上第二回合变量之和
            a = b;//将第二回合的值赋给a
            b = c;//将最终结果赋值给b,并准备下次循环,至此条件表达式不满足为止
        }
        return c;//返回循环之后得到的最终结果

    }

    //101-200之间的所有质数
    public static void Prime(){

        int g = 0;//定义变量g一次循环内i % 所有的j是不是都没有余数
        for (int i = 101; i < 200; i++) {//数字101起直到200停止

            for (int j = 2; j < i/2; j++) {//质数2起步,直到j < i/2时停止(任何数的最大因数不会超过他自身的一半)

                if (i % j == 0){//没余数就不是质数,g++
                    g++;
                    break;//退出循环,节省系统资源
                }

            }
            if (g == 0){//g经过循环后还等于0当前i是质数
                System.out.print(i + " ");//输出这个质数并用空格隔开
            }
            g = 0;//重置g的值,以便检测下一个质数

        }
        System.out.println();//输出一个换行

    }

    //所有的水仙花数
    public static void Daffodil(){

        for (int i = 100; i < 1000; i++) {//水仙花数的定义是一个三位数他百位上的数字的3次方+十位上的数字的3次方+个位上的数字的3次方等于这个数本身,所以取值范围在100到1000之间

            int a = i / 100;//i / 100 的商就是百位上的数字
            int b = (i % 100) / 10;//i % 100 的余数再 / 10 得到的商就是十位上的数字
            int c = (i % 100) % 10;//i % 100 的余数再 % 10 得到的余数就是个位上的数字
            if((a * a * a) + (b * b * b) + (c * c * c) == i){//如果a , b , c 三个数的平方想加等于 i 那么这个数就是水仙花数
                System.out.print(i + " ");//输出这个水仙花数并用空格隔开
            }

        }
        System.out.println();//输出一个换行

    }

    //将一个非质数的正整数分解为质因数;
    //用集合作比较方便,数组是定长的,虽然数组的长度可以设置为变量,但是数组的长度初始化之后就固定了,也就是说即使是变量,初始化之后变量改变,数组的长度也不会再改变了,所以方法看起来很复杂其实都是繁琐的定义长度,存入值,去除空值
    public static String PrimeFactors(int n){

        //储存n的初始值
        int k = n;

        //查找n之下的所有质数,之后将他们放入质因数表中
        int g = 0;//定义g用来判定j循环之后i是质数
        int z = 0;//定义z作为Z的索引
        int[] Z = new int[n / 2];//创建一个长度为n的一半的数组Z
        for (int i = 2; i <= n; i++) {//从质数2开始循环,到n停止

            for (int j = 2; j <= i/2; j++) {//从质数2开始循环 ,到i的一半停止

                if(i % j == 0){//没余数表示整除
                    g++;//g自增
                    break;//退出当次循环,节省系统资源
                }

            }
            if (g == 0){//g经历循环后依旧为0则i为质数
                Z[z] = i;//将i存入索引为z的数组Z中
                z++;//Z存入一个数字z自增一次
            }
            g = 0;//将g归零处理

        }

        //取出有用的值, 去除空值
        int G = 0;//定义G储存数组Z内不为零的值的个数
        for (int i = 0; i < Z.length; i++) {//循环次数为Z长度值

            if(Z[i] != 0){//索引的值不为零则为所需求的数
                G++;//G自增一次
            }

        }
        int[] Y = new int[G];//创建数组Z定义初始长度为G的值
        for (int i = 0; i < Y.length; i++) {//循环次数为Y的长度值

            if(Z[i] != 0){//判断索引值是否为空
                Y[i] = Z[i];//Z[i]不为空时将值存入Y[i]中
            }

        }

        //确定质因数的个数
        String[] a = new String[Y.length];//建立一个和Y长度一样的字符串数组
        int N = 0;//定义变量N储存质因数的个数
        for (int i = 0; n != 1; i++) {//n不等于1时循环继续

            for (int j = 0; n != 1; j++) {//n不等于1时循环继续

                if (n % Y[j] == 0){//判断n模Y[j]是否能整除
                    a[i] = ("" + Y[j]);//将y[j]的值转化成字符串存入a[i]中
                    n = n / Y[j];//将n / Y[j]的值赋值给n进行新一次的循环直至n等于1为止
                    N++;//每有一个符合要求的值N就自增一次
                    break;//退出当次循环节省系统资源
                }

            }

        }

        //最终输出分解出的质因数式子
        String[] A = new String[N];//新建字符串数组A,长度为质因数的个数;
        String d ="" + k + " = " + a[0];//定义d储存初始的质因数
        for(int i = 0;i < A.length;i++){//循环次数为A的长度值
            A[i] = a[i];//将a[i]的值赋给A[i]
            if(i != 0){//确定是否是第一个质因数,因为初始给d赋值了第一个质因数,所以得跳过第一个
                d += ("×" + A[i]);//将后续的所有质因数转化为字符串并用×拼接
            }
        }
        return d;//返回字符串d

    }

    //学习成绩
    public static char score(int a){

        char z = a >= 90 ? 'A' : (a >= 60 ? 'B' : (a < 60 ? 'C' : 'D'));
        return z;

    }

}

效果演示图:

小习题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值