白学JA之大量练习

对多位数的深度运算

当我们需要对多位数进行一定深度的运算的时候,循环是必不可少的。我们可以通过循环对多位数各个数位进行分离,分离之后可以随意操作(包括重新赋值、比较等)

水仙花数

public class HW2 {
    public static void main(String[] args) {
        System.out.println("100到999之间的水仙花数是:");
        for (int i = 100; i < 1000; i++) {
            int gei=0, shi=0, bai=0, sum=0;
            gei = i % 10;
            shi = i / 10 % 10;
            bai = i / 100;
            sum = gei*gei*gei + shi*shi*shi+ bai*bai*bai;
            if (sum==i){
                System.out.print(i+"\t");
            }
        }
    }
}

组成不相同的数

这是上一种情况的反向思维。用一个个数字组成一个多位数,也需要用到循环。循环和条件选择结构的结合使用,为这种需要遍历大量数据而从其中提取出合适的情况,提供了基础的逻辑结构。

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

public class HW7 {
    public static void main(String[] args) {
        int num = 0;
        for (int i = 1; i <= 4; i++) {
            for (int j = 1; j <= 4; j++) {
                for (int k = 1; k <= 4; k++) {
                    if (i != j && i != k && k != j){
                        num++;
                        System.out.print(i*100+j*10+k+"\t");
                    }
                }
            }
            System.out.println();
        }
    }
}

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

public class HW9 {
    public static void main(String[] args) {
        int num1=0,num2=0,num3=0;
        int root2, root3;
        while (num1 <= 100000){
            num1++;
            num2 = num1 + 100;
            num3 = num1 + 268;
            root2 = (int)Math.sqrt(num2);
            root3 = (int)Math.sqrt(num3);
            if (root2*root2 == num2 && root3*root3 == num3){
                System.out.println(num1);
            }
        }
    }
}

使用循环来达成某种对数的条件

多重循环,现阶段这里通常是指二重循环,由两个循环变量I和J组成了变化的主体部分。这里对I和J的理解可以有两种,这里将讲述第一种:用J循环来找出符合条件的I的值,求素数就是最典型的一种。

素数

判断2-100之间有多少个素数,并输出所有素数。

public class HW1 {
    public static void main(String[] args) {
        System.out.println("2到100之间的素数:");
        for (int i = 2; i <= 100 ; i++) {
            boolean k = true;
            for (int j = 2; j < i; j++) {
                if (i%j==0){
                    k = false;
                    break;
                }
            }
            if (k==true){
                System.out.print(i+"\t");
            }
        }
    }
}

分解质因数

将一个正整数分解质因数。

import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个正整数");
        int num = input.nextInt();
        System.out.print(num+"=1");
        for (int i = 2; i <=  num; i++) {
            if(i==num){
                System.out.print("*"+num);
                break;
            }else if(num%i==0){
                num/=i;
                System.out.print("*"+i);
                i--;
            }
        }
    }
}

图形相关

这里是对双重循环的第二种理解:即为横坐标和纵坐标。比较常见的题型有打印图形,或者将数据以某种特定的形状打印出来。

梯形

public class HW20 {
    public static void main(String[] args) {
        for (int i = 5; i <= 10; i++) {
            for (int j = 1; j <= (10-i); j++) {
                System.out.print(" ");
            }
            for (int j = 1; j <= 2*i-1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

杨辉三角形

public class HW15 {
    public static void main(String[] args) {
        int[][] a=new int[10][10];
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j <= i; j++) {
                if (j==0 || j==i){
                    a[i][j] = 1;
                }else{
                    a[i][j] = a[i-1][j-1]+a[i-1][j];
                }
            }
        }
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < (10-i); j++) {
                System.out.print("  ");
            }
            for (int j = 0; j < 10; j++) {
                if (a[i][j] != 0){
                    System.out.print(a[i][j]+"  ");
                }
            }
            System.out.println();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Helltaker/article/details/107323607
Ja