Java编程题(6)

这是我第6次给大家分享题,如果想看看以前的例题,请点开我的博客,查看作业分栏。谢谢收看。

问题1:计算1+2+3+4+5+…+98+99+100和斐波那契数列 求前20项

问题1:计算1+2+3+4+5+…+98+99+100:
我们设: f(n) 是求1~n的累加,那么 f(100)就是我们的问题
这题我用递归去做:在我们写递归时,一定要先写它的end!
↓ 递
f(n)=f(n-1)+n
f(100)=f(99)+100 return 1+2+3+…+99 +100
f(99)=f(98)+99 return 1+2+…+98 +99

f(4)=f(3)+4 return 1+2+3+4
f(3)=f(2)+3 return 1+2+3
f(2)=f(1)+2 return 1+2
f(1)=1 return 1
→ end ↑ 归
这就是第一题的思路

问题2:斐波那契数列 求前20项
1 1 2 3 5 8 13 21 34 55 …
如果 f(n)指的是斐波那契的第n项
f(n)=f(n-1)+f(n-2)这个题就要从20化到: f(1)=1 f(2)=1
跟上面的那个题思路一样,就是运算步骤多了几步。
不停变换值,达到运算效果
c=a+b;count++; if(count==n){ return; a=b; b=c;

class Test02{
    public static void main(String[] args){
        
        System.out.println(f(10));
        for(int i=1;i<=100;i++){//O(n)
            System.out.println(fibo(i));//O(2^n)
        }
        System.out.println("==============");
        fiboIterator(20);//用迭代的思想求前20项
    }
    //问题2
    public static void fiboIterator(int n){
        int a=1;
        int b=1;
        System.out.println(a);
        System.out.println(b);
        int count=2;
        int c;
        while(true){
            c=a+b;
            System.out.println(c);
            count++;
            if(count==n){
                return;
            }
            a=b;
            b=c;
        }
    }
    //问题1
    public static int fibo(int n){
        if(n==1||n==2){
            return 1;
        }
        return fibo(n-1)+fibo(n-2);
    }
    public static int f(int n){
        if(n==1){
            return 1;
        }
        return f(n-1)+n;
    }
 }
 

Demo04_01

在这里插入图片描述
这个题以前写过类似的题,只不过没用过函数的方法这次我就不详细说了,详细在题集5和4
1.先输入一个数字
2.编写函数
3.调用函数将num拆分求和
下面是代码演示:

import java.util.Scanner;
class Demo04_01{
    public static void main(String[] args){
        
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        long num=scanner.nextLong();
       
        int sum=sumDigits(num);
        System.out.println(sum);
    }
    public static int sumDigits(long n){
        int sum=0;
        while(true){
            sum+=n%10;
            n/=10;
            if(n==0){
                return sum;
            }
        }
    }
}

Demo04_02在这里插入图片描述

这个题在主函数中
1.提示用户输入一个数字
2.判断该数字是否是一个回文
在方法函数中:编写计算方法
1.先计算该数字的反序
2.对比反序的数字和数字本身
下面是代码演示:

import java.util.Scanner;
class Demo04_02{
    public static void main(String[] args){
        
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int num=scanner.nextInt();
       
        if(isPalindrome(num)){  // pause1
            System.out.println("是回文");
        }else{
            System.out.println("不是回文");
        }
    }
    public static boolean isPalindrome(int num){
   		 return reverse(num)==num; 
    }
    public static int reverse(int num){
        int sum=0;
        while(true){
            sum=sum*10+num%10;
            num/=10;
            if(num==0){
                return sum;
            }
        }
    }
}

Demo04_03

在这里插入图片描述
这个在题集4中出现,同类型,详解请往前翻
在主函数中
这个题在主函数中
1.提示用户输入一个数字
2.调用函数
在方法函数中:编写计算方法
1.先打印空格
2.在打印数字
注意循环开始和结束。
下面是代码演示:

import java.util.Scanner;
class Demo04_03{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入行数:");
        displayPattern(scanner.nextInt());
    }
    public static void displayPattern(int line){
        for(int i=1;i<=line;i++){
            for(int k=1;k<=line-i;k++){
                if(line<10){
                    System.out.print("  ");
                }else{
                    System.out.print("   ");
                }
            }
            for(int j=i;j>=1;j--){
                if(line<10){
                    System.out.printf("%-2d",j);
                }else{
                    System.out.printf("%-3d",j);
                }
            }
            System.out.println();
        }
    }
}

Demo04_05

在这里插入图片描述
这个题让你实现sqrt的函数,我们都知道这个函数是计算开方的,
根据题目的提示一步一步走就行
只不过这个题目中让你算lastGuess和nextGuess的差,记得这个差要带绝对值,你不能判断谁比较大。
所以这个题思路一样
1.在主函数中调用方法
2.在方法函数中运算
下面是代码演示

class Demo04_05{
    public static void main(String[] args){
        System.out.println(sqrt(9));
    }
    public static double sqrt(long n){
        double lastGuess=1;
        double nextGuess=(lastGuess+n/lastGuess)/2;
        while(true){
            if(Math.abs(nextGuess-lastGuess)<0.00001){
                return nextGuess;
            }
            lastGuess=nextGuess;
            nextGuess=(lastGuess+n/lastGuess)/2;
        }
    }
}

Demo04_06在这里插入图片描述

这个题跟上面的Demo04_02一样,只不过多了一个是素数,并不难,加一个素数的方法就行,轻松解决
这个题在主函数中
1.调用函数
2.判断该数字是否是一个回文素数
3.输出,换行
在回文方法函数中:编写计算方法
1.先计算该数字的反序
2.对比反序的数字和数字本身
在素数方法函数中:
1.用for循环看,他的可能因数
2.计算是否素数

下面是代码演示:

class Demo04_06{
    public static void main(String[] args){
        int count=0;    //表示回文素数的个数
        int num=2;      //表示可能的回文素数的数字 从2开始~?
        while(true){
            //如果num是 回文素数
            if(isHuiWenAndSuShu(num)){
                count++;
                System.out.print(num+" ");
                if(count%10==0){
                    System.out.println();
                }
            }
            if(count==100){
                break;
            }
            num++;
        }
    }
    public static boolean isHuiWenAndSuShu(int num){
        return isHuiWen(num)&&isSuShu(num);
    }
    public static boolean isHuiWen(int num){
        return reverse(num)==num;
    }
    public static int reverse(int num){
        int sum=0;
        while(true){
            sum=sum*10+num%10;
            num/=10;
            if(num==0){
                return sum;
            }
        }
    }
    public static boolean isSuShu(int num){
        for(int i=2;i<=num/2;i++){
            if(num%i==0){
                return false;
            }
        }
        return true;
    }
}

Demo04_07

在这里插入图片描述

这个题是上一个题的进阶版.要求本身是素数反转之后也是素数不能是回文
//素数() 反转() 回文功能()还是三个方法
这个题在主函数中
1.调用函数
2.判断该数字是否是一个回文素数
3.输出,换行
在回文方法函数中:编写计算方法
1.先计算该数字的反序
2.对比反序的数字和数字本身
在素数方法函数中:
1.用for循环看,他的可能因数
2.计算是否素数
只不过这个题要的不是回文,所以判断是回文时在,素数后面,先算出来,在比较不是回文
下面是代码演示:

class Demo04_07{
    public static void main(String[] args){
        int count=0;
        int num=2;
        while(true){
            if(isFanZhuanSuShu(num)){
                count++;
                System.out.print(num+" ");
                if(count%10==0){
                    System.out.println();
                }
            }
            if(count==100){
                return; //结束当前函数
            }
            num++;
        }
    }
    public static boolean isFanZhuanSuShu(int num){
        return isSuShu(num)&&isSuShu(reverse(num))&&!isHuiWen(num);
    }
    //回文功能
    public static boolean isHuiWen(int num){
        return reverse(num)==num;
    }
    //素数功能
    public static boolean isSuShu(int num){
        for(int i=2;i<=num/2;i++){
            if(num%i==0){
                return false;
            }
        }
        return true;
    }
    //反转功能
    public static int reverse(int num){
        int sum=0;
        while(true){
            sum=sum*10+num%10;
            num/=10;
            if(num==0){
                return sum;
            }
        }
    }
}

感谢你的阅读,如果我的分享对你有帮助的话,点个赞再走行不行,谢谢。

发布了38 篇原创文章 · 获赞 51 · 访问量 1200

猜你喜欢

转载自blog.csdn.net/xweiwxh/article/details/104331145