Java逻辑训练

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

程序分析:判断素数的方法:用一个数分别去除2到 (这个数),如果能被整除,则表明此数不是素数,反之是素数。
思路解析:
(1)任意一个数如何判断其是不是质数/素数
如果从2~i,能被i整除,即为合数,采用break语句。
(2)一个是要从2~100循环,循环的每一个数执行上面的操作
(3)如果有一个质数产生,计数器+1,同时打印该质数

public class Test1 {
    public static void main(String[] args) {
      int count=0;
        for (int num = 2; num<=100 ; num++) {
            int flag=0;//判断是否是合数的标志
            for (int j = 2; j <num ; j++) {
                if (num%j==0){
                    //代表num是合数
                    flag=1;
                    break;
                }
            }
            if (flag!=0){
                //合数
            }else{
                //质数
                count++;
                System.out.println("质数"+num);
            }
        }
        System.out.println("一共有"+count);
    }
}

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

程序分析:利用for循环控制100-999的数,每个数分解出个位,十位,百位。
思路解析:
判断一个数是不是水仙花数
(1)去除该三位数各位的数字
(2)对这3个数字求立方
(3)对立方的结果求和,与该数进行比较

public class Test2 {
    public static void main(String[] args) {
    for (int i = 100; i < 1000; i++) {
            int a=i/100;
            int b=i/10%10;
            int c=i%10;
            int sum=a*a*a+b*b*b+c*c*c;
            if (sum==i){
                System.out.println(i+"是水仙花数");
            }
        }
    }
}

3.将一个正整数分解质因数。例如:输入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的值,重复执行第一步。
思路解析:
如何将一个正整数分解质因数
(1)首先找最小质数
(2)除去最小质数
(3)更新变量,重复循环

import java.util.Scanner;
public class Test3 {
    public static void main(String[] args) {
 Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个正整数:");
        int num=sc.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--;
                }
            }
        }
    }
}```

## 4.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如5+55+555+5555+55555(此时共有5个数相加)。
程序分析:关键是计算出每一项的值
思路解析:
(1)重点是找出规律:
每一项的值num=num*10+a;
(2)循环相加

```java
import java.util.Scanner;
public class Test4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个10以内正整数:");
        int a=sc.nextInt();
        int sum=0;
        int num=a;
        for (int i=1;i<=a;i++){
            num=num*10+a;
            sum+=num;
        }
        System.out.println(sum);
    }
}

你可能感兴趣的:(笔记)