目录
题目1:打印1~100内奇数和、偶数和
题目2:计算5的阶乘
题目3:计算 1!+2!+3!+4!+5! 的和
题目4:找1~100之间即能被3整除,又能被5整除的数字,要求必须使用break/continue
题目5:实现猜数字小游戏(不需要菜单)
题目6:判断一个整数是否为素数
题目7: 打印1~100之间的所有素数
题目8:输出1000~2000之间所有的闰年
题目9:输出乘法口诀表
题目10:求两个正整数的最大公约数
题目11:求0~99999之间的"水仙花数"并输出
题目12:写一个函数返回参数在内存中二进制形式1的个数
题目1:打印1~100内奇数和、偶数和
思路:先利用循环得到1~100之间的数,判断如果i是奇数,则sumOdd+=i,如果i为偶数则,sumEven+=i,结束循环后在屏幕上打印结果即可。
public static void main(String[] args) {int i = 1;int sumOdd = 0;//奇数int sumEven = 0;//偶数while (i <= 100) {if (i % 2 == 1) {sumOdd += i;} else {sumEven += i;}i++;}System.out.println("奇数和"+sumOdd);System.out.println("偶数和"+sumEven);}
题目2:计算5的阶乘
思路:5!为1*2*3*4*5,将循环变量设为i,进入循环的条件设置为i<=5,在循环里面进行mul*=i的操作(别忘了调整循环变量i的大小),结束循环后在屏幕上打印结果即可。
public static void main(String[] args) {int i = 1;int mul = 1;while (i <= 5) {mul *= i;i++;}System.out.println(mul);}
题目3:计算 1!+2!+3!+4!+5! 的和
思路:求一个数的阶乘好求,如果要求不同数的阶乘,我们也可以直接利用求一个数阶乘的方法,在它的外面加上一层循环,即变量即j表示求几的阶乘,而原本阶乘方法中的循环的条件改为与 j 相关,循环全部结束后在屏幕上打印结果即可。
public static void main(String[] args) {int j = 1;int sum = 0;while (j <= 5) {int i = 1;int mul = 1;while (i <= j) {mul *= i;i++;}sum += mul;j++;}System.out.println(sum);}
题目4:找1~100之间即能被3整除,又能被5整除的数字,要求必须使用break/continue
思路:它们的最小公倍数是15,也就是说只要是15的倍数都能被它两整除,可以先利用循环得到1~100之间的数,然后判断i%15是否==0,不是则i++,使用continue不执行后面打印的功能;是则直接打印,然后i++;
public static void main(String[] args) {int i = 1;while (i <= 100) {if (i % 15 != 0) {i++;continue;}System.out.println(i);i++;}}
题目5:实现猜数字小游戏(不需要菜单)
思路:随机数的生成要用到 Random random = new Random(); 得到的随机数写成 int randNum = random.nextInt(100); 的格式,在()写入n就生成 [0,n-1) 之间的数。为了多次猜测,所以用到了while(true),在while内部进行游戏判断的过程即可,如果猜对了用break跳出循环即可。
public static void main(String[] args) {Scanner scan = new Scanner(System.in);Random random = new Random();int randNum = random.nextInt(100);//[0,100)System.out.println("随机数是"+randNum);while (true) {System.out.print("请输入>");int num = scan.nextInt();if (num < randNum) {System.out.println("猜小了");} else if (num == randNum) {System.out.println("猜对了");break;} else {System.out.println("猜大了");}}}
题目6:判断一个整数是否为素数
思路:首先了解什么是素数"素数是大于1的自然数,且只能被1或它本身整除"
技巧:构成num的两个数一定有一个小于等于num开平方,因此在写除数时不用写成 i < num,直接写成 i <= Math.sqrt(num),如果num被i整除,则break,说明num肯定不是素数。注意,出for循环后会有两种情况,一种是通过break出来的,另一种是循环结束出来的,因此要判断一下是哪一种情况出来的。
public static void main(String[] args) {Scanner scan = new Scanner(System.in);int num = scan.nextInt();int i = 0;for (i = 2; i <= Math.sqrt(num); i++) {if (num % i == 0) {break;//说明不是素数}}if (i > Math.sqrt(num)) {System.out.println(num+"是素数");} else {System.out.println(num+"不是素数");}}
题目7: 打印1~100之间的所有素数
思路:在上面判断是否为素数的基础上,加一层循环,得到2~100之间的数,将上面代码中的num替换乘i即可。
public static void main(String[] args) {for (int i = 2; i < 101; i++) {int j = 0;for (j = 2; j <= Math.sqrt(i) ; j++) {if (i % j == 0) {break;}}if (j > Math.sqrt(i)) {System.out.println(i+"是素数");}}}
题目8:输出1000~2000之间所有的闰年
思路:判断该年年份是闰年的条件:①能被4整除,但不能被100整除 ②能被400整除
public static void main(String[] args) {for (int i = 1000; i < 2001; i++) {if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {System.out.println(i);}}}
题目9:输出乘法口诀表
public static void main(String[] args) {//外层变化慢for (int i = 1; i < 10; i++) {//内层变化快for (int j = 1; j <= i; j++) {System.out.printf("%d*%d=%2d ", i, j, i*j);}System.out.println();}}
题目10:求两个正整数的最大公约数
思路:辗转相除法
public static void main(String[] args) {Scanner scan = new Scanner(System.in);int a = scan.nextInt();int b = scan.nextInt();int c = a % b;while (c != 0) {a = b;b = c;c = a % b;}System.out.println(b);}
题目11:求0~99999之间的"水仙花数"并输出
思路:水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。先得到100~999999之间的数,判断一下i是几位数(这决定了后面要求每一位的几次方),且由于i不能改变,所以要定义一个临时i去参与计算,每得到i的一位就求它的次方数并放入sum中,最后判断一下在当前循环下sum是否等于i。
public static void main(String[] args) {for (int i = 100; i < 1000000; i++) {//1.计算当前数字i是一个几位数int count = 0;int tmp = i;while (tmp != 0) {count++;tmp /= 12;}tmp = i;//方便后面再次使用int sum = 0;//2.求tmp的每一位while (tmp != 0) {sum += Math.pow(tmp % 10, count);tmp /= 10;}if (sum == i) {System.out.println(i);}}}
题目12:写一个函数返回参数在内存中二进制形式1的个数
public static void main(String[] args) {Scanner scan = new Scanner(System.in);//例如求:-1在内存中的二进制表示形式1的个数// 10000000 00000000 00000000 00000001 -1原码// 11111111 11111111 11111111 11111110 -1反码// 11111111 11111111 11111111 11111111 -1补码// 即有32位// 11111111 11111111 11111111 11111111 -1补码// 00000000 00000000 00000000 00000001 1的补码//通过判断 (-1>>i)& 1 == 1可以实现效果,i < 32int a = scan.nextInt();int count = 0;for (int i = 0; i < 32; i++) {if (((a >> i) & 1) == 1) {count++;}}System.out.println(count);}
本篇文章已完结,谢谢支持哟 ^^ !!!