【每日一练】基础题目练习

1、打印1-100之间所有的素数

素数:(也说质数) 数学上指在大于1的整数中只能被1和它本身整除的数。如2、3、5、7、11、43、109。过去。

方法一:

如果数据i能够被[2 ,qsrt(i)]之间的数整除,则表示这个数不是素数。

当一个数n=a*b时,a和b中最小的数一定比qsrt(n)小,这样在这个区间中,只要有一个数可以整除n,就表明这个数不是素数。(例如:90,qsrt(90)=9.48,9*9=81,所以必有一个数小于qsrt(90)).

 【代码示例】

    public static void main(String[] args) {

        for (int j = 2; j<=100 ;j++) {
            int i;
            for (i = 2;i <= Math.sqrt(j);i++) {
                if(j%i == 0) {
                    //System.out.println("n不是素数:"+n);
                    break;
                }
            }
            if(i > Math.sqrt(j)) {
                System.out.println(j + "是素数");
            }
        }
    }

方法二: 

用一个数除以它之前的所有数,当都不能被整除的时候,则这个数为素数。

【代码示例】

public static void main(String[] args) {
    //外层生成被除数
    for (int i = 2; i < 100; i++) {
        boolean flg = false;
        //内层生成除数
        for (int j = 2; j < i; j++) {//j不能等于1,等于1的话,每进来一个数i%1 都等于0
            if(i%j == 0){
                flg = true;
                break;//跳出内层循环
            }
        }
        if(flg == false){
            System.out.print(i+" ");
        }
    }
}

方法三:

是对方法二的优化,当除到这个数的一半的时候,没有数能够将这个数整除。就可以确定这个数为素数。

【代码示例】

public static void main(String[] args) {
    //外层生成被除数
    for (int i = 2; i < 100; i++) {
        boolean flg = false;
        //内层生成除数
        for (int j = 2; j < i/2; j++) {//j不能等于1,等于1的话,每进来一个数i%1 都等于0
            if(i%j == 0){
                flg = true;
                break;//跳出内层循环
            }
        }
        if(flg == false){
            System.out.print(i+" ");
        }
    }
}

2、编写程序数一下1-100的所有整数中出现多少个数字9

    public static void main(String[] args) {
        int count = 0;
        for (int i = 0; i < 100; i++) {
            if(i%10 == 9){//判断个位是否为9
                count ++;
            }
            if(i/10 == 9){//判断十位是否为9
                count++;
            }
        }
        System.out.println(count);
    }

3、求一个整数,在内存当中存储时,二进制1的个数。

采用按位与(&),将每个数与1按位与,这样就可以得到二进制的数,当n&1==1的时候,计数,判断完之后,将二进制数向右移动一位(无符号右移)。

这里要考虑到正数和负数,所以我们采用无符号右移(>>>)向右移动一位,左边补0.

 public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int num = scan.nextInt();
        int count = 0;
        while(num!=0){
            if((num&1) == 1){
                count++;
            }
            num = num>>>1;//表示向右移动一位,左边补0
        }
        System.out.println(count);
    }

4、求两个整数的最大公约数 

辗转相除法

例子:18和24的最大公约数

第一次:a = 18 b = 24 c = a%b = 18%24 = 18

   循环中:a = 24  b=18

第二次:a = 24  b = 18 c = a%b = 24%18 = 6

   循环中:a = 18  b = 6

第三次:a = 18  b = 6  c=a%b = 18%6 = 0

 循环结束

【代码示例】 

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入两个数");
        int a = scan.nextInt();
        int b = scan.nextInt();
        func(a,b);
    }
    public static void func(int a,int b){
        while(a%b != 0){
            int c = a%b;
            a = b;
            b = c;
        }
        System.out.println("最大公约数为"+b);
    }
}

5、X型图案

【每日一练】基础题目练习_第1张图片

 【代码示例】

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
       if(scan.hasNext()){
            int n = scan.nextInt();
            //每一行
            for (int i = 0; i < n ; i++) {
                //每行当中的每列
                for (int j = 0; j < n; j++) {
                    if(i == j||i+j ==n-1){
                        System.out.print("*");
                    }else{
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }
        }
    }

注意:上述的这句代码

  if(i == j||i+j ==n-1){

前边的i == j判断的是i和j相等的时候输出*,但是如果后面没有i+j == n-1的这句代码,最后产生的结果就会成为单行,不能形成X。

【每日一练】基础题目练习_第2张图片

i+j == n-1的这句代码不仅控制了行,也控制了列,当i+j == n-2时,结果为

【每日一练】基础题目练习_第3张图片

 

你可能感兴趣的:(每日一练,算法,数据结构)