> 文章列表 > 【每日一练】基础题目练习

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

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

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 都等于0if(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 都等于0if(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){//判断个位是否为9count ++;}if(i/10 == 9){//判断十位是否为9count++;}}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型图案

 【代码示例】

    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。

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