对于Java语言,笔者刚刚入门!但是,也酝酿了许久!今日,打算发一篇小小的练习题:由Java语言实现(初级),特别简单,在C语言初级阶段,笔者都已经见识过,做过了!!表示,小白合适的练习题!!
判断一个数字是不是素数(排除1和负数)三种方法求解
求出1到100之间的所有素数!
输出乘法口诀(可以指定乘法口诀的大小)!
求两个数字的最大公约数(辗转相除法)!
求出0到999之间的所有“水仙花数”,并输出!
求出某个数中二进制1的个数!!(三种方法)
获取一个二进制中所有的偶数位和所有的奇数位,并分别输出二进制序列!
编写程序,数一下:1到100之间的所有整数中,出现多少个数字9!(此时99算两个!)
判断1到100之间有多少个数字里面有9!(此时99算一个!)
打印X图形!(随机定义大小)
对于上述的练习题,笔者有的个别题目涉及到了多种方法!!请大家仔细辨别!!
注意,本文笔者创建了一个文件名,叫做:Add.java !请大家不要弄混肴!!要保持文件名与类名一致!
1.判断一个数字是不是素数(排除1和负数)三种方法求解
判断一个数字是不是素数,我们可以根据素数的定义来进行!(方法1)
请看笔者的代码:
import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scanner =new Scanner(System.in); int n = scanner.nextInt(); int i=2; for(i=2;i<n;i++) { if(n%i==0) { //System.out.println(n+"不是素数!"); break; } } if(i==n) { System.out.println(n+"是素数!"); } } }
上述代码的运行结果为:
方法2:
其实对于一个数字n 可以写成n=a*b的形式!!
对于:16这个数字而言!16=1*16, 16=2*8; 16=4*4!
因此,我们发现对于一个数字n,一定会有一个数字小于等于n/2是n的因数!
import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scanner =new Scanner(System.in); int n = scanner.nextInt(); int i=2; for(i=2;i<n;i++) { if(n%i==0) { //System.out.println(n+"不是素数!"); break; } } if(i==n) { System.out.println(n+"是素数!"); } } }
注意一下区别!!仅仅更改了部分代码!!
方法3!!
其实对于一个数字n 可以写成根号的形式!!
对于:16这个数字而言!16=1*16, 16=2*8; 16=4*4!
因此,我们发现对于一个数字n,一定会有一个数字小于等于根号n的!
import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scanner =new Scanner(System.in); int n = scanner.nextInt(); int i=2; for(i=2;i<=Math.sqrt(n);i++) { if(n%i==0) { // System.out.println(n+"不是素数!"); break; } } if(i>Math.sqrt(n)) { System.out.println(n+"是素数!"); } } }
2.求出1到100之间的所有素数!
import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scanner = new Scanner((System.in)); int n = scanner.nextInt(); for (int j =1; j<=n; j++) { int i=2; for (i=2;i<=Math.sqrt(j);i++) { if(j%i==0) { break; } } if(i>Math.sqrt(j)) { System.out.println(j+"是素数!"); } } } }
上述代码的运行结果为:
3.输出乘法口诀(可以指定乘法口诀的大小)!
import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scanner = new Scanner((System.in)); int n = scanner.nextInt(); for(int i=1;i<=n;i++) { for(int j=0;j<=i;j++) { System.out.print(i+"*"+j+"="+i*j+" "); } System.out.println(); } } }
代码的运行结果为:
4.求两个数字的最大公约数(辗转相除法)!
import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scanner = new Scanner((System.in)); int a = scanner.nextInt(); int b = scanner.nextInt(); int c=a%b; while(c!=0) { a=b; b=c; c=a%b; } System.out.println("最大公约数为:"+b); } }
代码的运行结果为:
5. 求出0到999之间的所有“水仙花数”,并输出!
对于得到水仙花数,我们主要有两个难点!(以153为例!)
如何获得每一位数字??
如何获得这个数字是几位数??
import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scanner = new Scanner((System.in)); int n = scanner.nextInt(); for (int i = 0; i < n ; i++) { //判断是几位数? int count=0; int tmp=i; while(tmp!=0) { count++; tmp=tmp/10; } //此时tmp为0;但是i不为0 tmp = i; int sum=0; while(tmp!=0) { sum+=Math.pow(tmp%10,count); tmp=tmp/10; } if(sum==i) { System.out.println(i); } } } }
代码的运行结果为:
6.求出某个数中二进制1的个数!!(三种方法)
方法1:
假设该数字为15:二进制中含有4个1
import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scanner = new Scanner((System.in)); int n = scanner.nextInt(); int count=0; for (int i = 0; i < 32; i++) { if(((n>>>i)&1)!=0) { count++; } } System.out.println(count); } }
代码的运行结果为:
上述代码中:if(((n>>>i)&1)!=0) : 无符号右移!!可以解决负数死循环的问题!!当输入的数字为负数的时候,符号数为1,右移以后,增添1,然后会导致死循环!!
对于上述的代码,如果输入的数字很小,但是也会运行32次!!所以显得有点浪费循环的次数!!
方法2:
import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scanner = new Scanner((System.in)); int n = scanner.nextInt(); int count=0; while(n!=0) { if((n&1)!=0) { count++; } n=n>>>1; } System.out.println(count ); } }
方法3:
import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scanner = new Scanner((System.in)); int n = scanner.nextInt(); int count=0; while(n!=0) { n=n&(n-1); count++; } System.out.println(count ); } }
7.获取一个二进制中所有的偶数位和所有的奇数位,并分别输出二进制序列!
该问题主要在于:判断一个数的二进制中是1还是0就可以了!因此,可以按位与一个1就可以求出!
从右往左数!!
import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scanner = new Scanner((System.in)); int n = scanner.nextInt(); System.out.println("偶数位:"); for (int i = 31; i >=1; i=i-2) { System.out.print(((n>>i)&1)+" "); } System.out.println(); System.out.println("奇数位:"); for (int i = 30; i >=0; i=i-2) { System.out.print(((n>>i)&1)+" "); } } }
代码的运行结果为:
8.编写程序,数一下:1到100之间的所有整数中,出现多少个数字9!(此时99算两个!)
public class Add { public static void main(String[] args) { int count=0; for(int i=0;i<=100;i++) { if(i%10==9) { count++; } if(i/10==9) { count++; } } System.out.println(count); } }
代码的运行结果为:
9.判断1到100之间有多少个数字里面有9!(此时99算一个!)
import java.util.Scanner; public class Add { public static void main(String[] args) { int count=0; for(int i=0;i<=100;i++) { if(i%10==9) { count++; } else if(i/10==9) { count++; } } System.out.println(count); } }
代码的运行结果为:
10.打印X图形!(随机定义大小)
import java.util.Scanner; public class Add { public static void main(String[] args) { Scanner scanner = new Scanner((System.in)); int n = scanner.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(); } } }
代码的运行结果为: