目录
[题目3:计算 1!+2!+3!+4!+5! 的和](#题目3:计算 1!+2!+3!+4!+5! 的和)
题目4:找1~100之间即能被3整除,又能被5整除的数字,要求必须使用break/continue
[题目7: 打印1~100之间的所有素数](#题目7: 打印1~100之间的所有素数)
题目1:打印1~100内奇数和、偶数和
思路:先利用循环得到1~100之间的数,判断如果i是奇数,则sumOdd+=i,如果i为偶数则,sumEven+=i,结束循环后在屏幕上打印结果即可。
java
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的大小),结束循环后在屏幕上打印结果即可。
cpp
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 相关,循环全部结束后在屏幕上打印结果即可。
java
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++;
java
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跳出循环即可。
java
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出来的,另一种是循环结束出来的,因此要判断一下是哪一种情况出来的。
java
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即可。
java
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整除
java
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:输出乘法口诀表
java
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:求两个正整数的最大公约数
思路:辗转相除法
java
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。
java
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的个数
java
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 < 32
int a = scan.nextInt();
int count = 0;
for (int i = 0; i < 32; i++) {
if (((a >> i) & 1) == 1) {
count++;
}
}
System.out.println(count);
}
本篇文章已完结,谢谢支持哟 ^^ !!!