欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA基础编程练习自我总结

程序员文章站 2022-06-30 20:48:20
...

文章目录


初学java,每天码一码代码。

  1. 斐波那契数列1,1,2,3,5,8,…。求第40个数。
    【思路】递归
    【代码】
public class Test1 {
    public static void main(String[] args) {
        System.out.println("斐波那契数列1,1,2,3,5,8,...,求第40个数。");
        long num = factorial(40);
        System.out.println(num);
    }
    //递归
    static long factorial(long count){
        long num = 0;
        if(count==2||count==1){    //递归头
            return 1;
        }else{  //递归体
            return num = factorial(count-1)+factorial(count-2);
        }
    }
}

【输出结果】
JAVA基础编程练习自我总结

  1. 判断101-200间的整数有多少个素数,并输出这些素数
    【思路】嵌套循环求数的因子数,如果求得因子数量为2个(1和自身),则为质数。
    【代码】
public class Test2 {
    public static void main(String[] args) {
        System.out.println("判断101-200间的整数中有多少个素数,并输出这些数。");
        int num = 0;
        for(int i=101;i<200;i+=2){   //遍历101-200的所有数,已知偶数均不是素数,故可减少计算量
            int count = 0;          //记录当前数的因子个数
            for(int j=1;j<=i;j++){  //在[1,i]的整数范围内寻找当前数的因子j
                if(i%j==0){         //如果i/j为整数,则j为i的一个因子,计数+1
                    count+=1;
                }
            }
            if(count==2){           //当且仅当计数为2时,表示当前数只有1和本身两个因子,即为素数
                System.out.print(i+"\t");
                num++;
            }
        }
        System.out.println("\n则101-200内的整数中有"+num+"个素数");
    }
}

【输出结果】
JAVA基础编程练习自我总结

  1. 打印出所有的"水仙花数"。所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
    【思路】(1)遍历100-999的整数,分别提取当前数的个位、十位、百位数字,按定义计算。(2)或嵌套循环
    【代码】(1)
public class Test3_1 {
    public static void main(String[] args) {
        System.out.println("求所有水仙花数,并输出。水仙花数如153=1^3+5^3+3^3。");
        long startTime = System.currentTimeMillis();
        int gw,sw,bw;
        for(int i=100;i<1000;i++){
            bw = i/100;
            sw = i%100/10;
            gw = i%10;
            if(bw*bw*bw+sw*sw*sw+gw*gw*gw==i){
                System.out.print(i+"\t");
            }
        }
        long endTime = System.currentTimeMillis();
        System.out.println("\nExecute time:" +(endTime-startTime)+"ms");
    }
}

【输出结果】
JAVA基础编程练习自我总结

【代码2】

public class Test3_2 {
    public static void main(String[] args) {
        System.out.println("求所有水仙花数,并输出。水仙花数如153=1^3+5^3+3^3。");
        long startTime = System.currentTimeMillis();
        for(int bw=1;bw<=9;bw++){
            for(int sw=0;sw<=9;sw++){
                for(int gw=0;gw<=9;gw++){
                    if(bw*bw*bw+sw*sw*sw+gw*gw*gw==bw*100+sw*10+gw){
                        System.out.print((bw*100+sw*10+gw)+"\t");
                    }
                }
            }
        }
        long endTime = System.currentTimeMillis();
        System.out.println("\nExecute time:" +(endTime-startTime)+"ms");
    }
}

【输出结果】
JAVA基础编程练习自我总结

  1. 将一个正整数分解质因数。例如:输入90,打印出90=233*5。
    【思路】
    (1)如果这个质数恰等于n,则说明分解质因数的过程已结束,打印出即可。
    (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
    (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
    【代码】
import java.util.Scanner;

public class Test4{
    public static void main(String[] args) {
        System.out.println("将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。");
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个大于1的正整数:");
        int num = sc.nextInt();
        System.out.print(num+"=");
        int i = 2;
        diff(num,i);
    }
    static void diff(int num, int i){
        while(i!=num){
            if(num%i==0){
                num/=i;
                System.out.print(i+"*");
            }else{
                i++;
            }
        }
        if(num==i){
            System.out.print(i);
        }
    }
}

【输出结果】
JAVA基础编程练习自我总结

  1. 输入两个正整数m和n,求其最大公约数和最小公倍数。
    【思路】循环:每一轮用大数除以小数,得到余数。将上一轮的小数作为本轮循环的大数,上一轮的余数作为本轮的小数,直到某一轮的小数为0,输出这一轮的大数,即为两数的最大公约数。而最小公倍数等于两数之积除以最大公约数。
    【代码】
import java.util.Scanner;

public class Test5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入两个正整数,以回车键结束");
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int temp = 0;
        int yushu,minGYS,maxGBS;
        if(num1<num2){	//保证第一个数是大数
            temp = num1;
            num1 = num2;
            num2 = temp;
        }
        minGYS = diff(num1,num2);
        maxGBS = num1*num2/minGYS;
        System.out.print(",最小公倍数为"+maxGBS);
    }
    static int diff(int x, int y){
        int yushu =0;
        while(y!=0){
            yushu = x%y;
            x = y;
            y = yushu;
        }
        if(y==0) {
            System.out.print("两数的最大公因数为"+x);
        }
        return x;
    }
}

【输出结果】
JAVA基础编程练习自我总结

  1. 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
import java.util.Scanner;

public class Test6 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一段字符串(以回车结束):");
        String str = sc.nextLine();
        char[] ch = null;
        int numDigit=0, numCharacter=0, numSpace=0, numOthers=0;
        ch = str.toCharArray();
        for(int i=0;i<ch.length;i++){
            if(ch[i]>='0'&&ch[i]<='9'){
                numDigit++;
            }else if(ch[i]>='a'&&ch[i]<='z'||ch[i]>='A'&&ch[i]<='Z'){
                numCharacter++;
            }else if(ch[i]==' '){
                numSpace++;
            }else{
                numOthers++;
            }
        }
        System.out.println("这段字符串中有"+numDigit+"个数字,"+numCharacter+"个英文字母,"+numSpace+"个空格,"+numOthers+"个其他字符。");
    }
}

【输出结果】
JAVA基础编程练习自我总结

  1. 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),数字与几个数相加均由键盘输入。
    【代码】
import java.util.Scanner;

public class Test7 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个1-9间的整数:");
        int num = sc.nextInt();
        System.out.print("请输入加数的个数(请勿过多):");
        int count = sc.nextInt();
        long sum = add(num,count);
        System.out.print(sum);
    }
    static long add(int x,int y){
        long s = x;
        int gw = x;
        System.out.print(x);
        for(int i=1;i<y;i++){
            x = x+gw*(int)Math.pow(10,i);
            System.out.print("+"+x);
            s += x;
            }
        System.out.print("=");
        return s;
    }
}

【输出结果】
JAVA基础编程练习自我总结

  1. 一个数如果恰好等于它的因子之和,这个数就称为"完数",例如6=1+2+3。找出1000以内的所有完数。
    【思路】嵌套循环:外层遍历1000以内的所有整数i,内层遍历[1,i]的整数j,如果i%j==0,那么说明j是i的因子。依次统计i的所有因子并相加。
    【代码】
public class Test8 {
    public static void main(String[] args) {
        System.out.println("求出1000以内的所有完数,如6=1+2+3。并输出。");
        for (int i=1;i<1001;i++){
            int sum = 0;
            for(int j=1;j<i/2+1;j++){
                if(i%j==0){
                    sum+=j;
                }
            }
            if(sum==i){
                System.out.print(i+"\t");
            }
        }
    }
}

【输出结果】
JAVA基础编程练习自我总结

  1. 一球从100米高度*落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?
    【代码】
public class Test9 {
    public static void main(String[] args) {
        double height=100;
        double lucheng = 100;
        for(int i=1;i<10;i++){
            height = height/2;
            lucheng = lucheng+2*height;
        }
        System.out.println("球第十次落地时共经过了"+lucheng+"米,第10次反弹的高度为"+height+"米");
    }
}

【输出结果】
JAVA基础编程练习自我总结

  1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    【思路】三重嵌套循环
    【代码】
public class Test7 {
    public static void main(String[] args) {
        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){
                        System.out.print(i*100+j*10+k+"\t");
                    }
                }
            }
        }
    }
}

【输出结果】
JAVA基础编程练习自我总结

相关标签: java