当前位置 博文首页 > m0_46212244的博客:java基础练习题目
1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
import java.sql.SQLOutput;
import java.util.Scanner;
/**
* 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一
* 对兔子,假如兔子都不死,问每个月的兔子总数为多少?
*
* 解题思路:1月--1对 2月--1对 3月--2对 4月--3对 5月--5对 6月--8对 7月--13对
* 由此可得规律从第三月开始,数量都是前两个月的和,即3月等于1月加2月
* 4月等于3月加2月 5月等于4月加3月 .......
*/
public class Test01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建Scanner对象来接收键盘输入的数据
System.out.println("请输入你要计算的月数:");
int num = scanner.nextInt(); // 将键盘输入的信息扫描为int
if (num == 1) { // 如果为1月的时候 直接打印出
System.out.println(num + "月的兔子是" + num + "对" + "," + "总数是" + num * 2);
return;
} else if (num == 2) { // 如果为2月的时候 直接打印出
System.out.println(num + "月的兔子是" + (num - 1) + "对" + "," + "总数是" + (num - 1) * 2);
return;
}
int[] list = new int[num]; // 定义一个动态的数组,用来存储
list[0] = list[1] = 1; // 因为1月和2月都是1对 所以直接赋值1
for (int i = 2; i < num; i++) { // 从2开始遍历 也就是3月开始遍历添加
list[i] = list[i - 1] + list[i - 2]; // 从上方解题思路可得的计算
System.out.println((i + 1) + "月的兔子是" + list[i] + "对" + "," + "总数是" + 2 * list[i]);
}
}
}
以下为打印结果:
请输入你要计算的月数:
12
3月的兔子是2对,总数是4
4月的兔子是3对,总数是6
5月的兔子是5对,总数是10
6月的兔子是8对,总数是16
7月的兔子是13对,总数是26
8月的兔子是21对,总数是42
9月的兔子是34对,总数是68
10月的兔子是55对,总数是110
11月的兔子是89对,总数是178
12月的兔子是144对,总数是288
2.判断101-200之间有多少个素数,并输出所有素数。
/**
* 判断101-200之间有多少个素数,并输出所有素数。
*
* 解题思路:素数又叫质数,就是除了1和它本身之外没有整数能被它整除的数。
* 先定义一个for循环遍历101 - 200 然后再定义for循环用来做除数
* 判断i 能不能整除 j
*/
public class Test02 {
public static void main(String[] args) {
int num = 0; // 用来累加素数个数
for (int i = 101; i < 200; i++) {
boolean b = false;
for (int j = 2; j < i; j++) {
if ( i % j == 0) { // 如果为true 即i能整除j
b = false; // b的值还是false
break; // 到这里结束当前i的循环
} else { // 如果不能整除
b = true; // 重新赋值为true
}
}
if (b) { // 当b为true时
num++; // 素数个数加1
System.out.println(i+ "\t"); // 打印当前i 即素数
}
}
System.out.println(num); // 打印素数的总数
}
}
打印结果:
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 素数的总数是:21
3.打印出100–999所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方
package com.company.practice;
/**
* 打印出100--999所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:
* 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方
*/
public class Test03 {
public static void main(String[] args) {
for (int i = 100; i <= 999; i++) {
int a = i / 100; // 拿出当前数的百位
int b = (i - a * 100) / 10; // 拿出当前数的十位
int c = i - a * 100 - b * 10; // 拿出当前数的个位
int sum = a * a * a + b * b * b + c * c * c; // 计算百位 十位 个位 的立方和
if (sum == i) { // 如果sum等于i
System.out.println(sum); // 打印出100 -- 999 的所有水仙花数
}
}
}
}
打印结果:
153
370
371
407
4.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
package com.company.practice;
import java.util.Scanner;
/**
* 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
*
* 解题思路:先将字符串转换为一个字符串数组,然后遍历判断
*/
public class Test04 {
public static void main(String[] args) {
int english = 0; // 文字母个数
int space = 0; // 空格键个数
int num = 0; // 数字个数
int other = 0; // 其他字符个数
Scanner scanner = new Scanner(System.in); // 创建Scanner对象来接收键盘输入的数据
System.out.println("请输入任意字符:");
String str = scanner.nextLine(); // nextLine()方法返回的是输入回车之前的所有字符。
char[] chars = str.toCharArray(); // 将字符串对象中的字符转换为一个字符数组
for (int i = 0; i < chars.length; i++) {
if (Character.isLowerCase(chars[i])){ // 遍历判断数组中的对应下标元素是否为字母
english++;
} else if (Character.isDigit(chars[i])) { // 遍历判断数组中的对应下标元素是否为数字
num++;
} else if (Character.isSpaceChar(chars[i])) { // 遍历判断数组中的对应下标元素是否为空格
space++;
} else { // 即如果以上都不是 归纳为其他字符
other++;
}
}
// 最后打印所有的字符个数
System.out.println("字母的个数:" + english);
System.out.println("空格的个数:" + space);
System.out.println("数字的个数:" + num);
System.out.println("其他字符的个数:" + other);
}
}
打印结果:
请输入任意字符:
jksjo3i2 o'ipsoi2 [ ]o o ]2o so 4 ] o]4o44498889 783 o]o]oio ]]lks.k [k; j['
字母的个数:30
空格的个数:15
数字的个数:17
其他字符的个数:15
5.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加), 几个数相加由键盘控制
package com.company.practice;
import java.util.Scanner;
/**
* 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),
* 几个数相加由键盘控制
*/
public class Test05 {
public