1.古典问题
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一
对兔子,假如兔子都不死,问每个月的兔子总数为多少?
public class Rabbit {
public static void main(String[] args) {
int months = 12; // 假设计算12个月的情况
RabbitArray(months);
}
public static void RabbitArray(int months) {
int[] rabbits = new int[months];
// 初始情况
if (months >= 1) {
rabbits[0] = 1; // 第1个月初,初始只有1对兔子
}
if (months >= 2) {
rabbits[1] = 1; // 第2个月初,还是只有1对兔子
}
// 计算每个月的兔子总数
for (int i = 2; i < months; i++) {
rabbits[i] = rabbits[i-1] + rabbits[i-2]; // 根据斐波那契数列规律计算
}
// 输出结果
for (int i = 0; i < months; i++) {
System.out.println("第 " + (i+1) + " 个月的兔子总数为: " + rabbits[i]);
}
}
}
2.判断素数
判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
public class Prime {
public static void main(String[] args) {
int start = 101;
int end = 200;
System.out.println("101到200之间的素数有:");
int count = 0;
for (int num = start; num <= end; num++) {
if (isPrime(num)) {
count++;
System.out.print(num + " ");
}
}
System.out.println("\n总共有 " + count + " 个素数。");
}
// 判断一个数是否为素数的方法
public static boolean isPrime(int num) {
if (num <= 1) {
return false;
}
if (num == 2 || num == 3) {
return true;
}
if (num % 2 == 0 || num % 3 == 0) {
return false;
}
int sqrtNum = (int) Math.sqrt(num);
for (int i = 5; i <= sqrtNum; i += 6) {
if (num % i == 0 || num % (i + 2) == 0) {
return false;
}
}
return true;
}
}
3.水仙花数
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:
153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
public class Daffodil {
public static void main(String[] args) {
// System.out.println("水仙花数有:");
for (int num = 100; num <= 999; num++) {
int hundred = num / 100; // 百位
int ten = (num / 10) % 10; // 十位
int one = num % 10; // 个位
// 计算各位数字的立方和
double sums = Math.pow(hundred, 3) + Math.pow(ten, 3) + Math.pow(one, 3);
// 判断立方和是否等于原数
if (sums == num) {
System.out.println(num + " 是一个水仙花数");
}
}
}
}
4.分解质因数
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
public class Decompose {
public static void main(String[] args) {
int i = 90;
// 调用方法打印质因数
print(i);
}
public static void print(int i) {
// 边界条件检查
if (i <= 1) {
System.out.println(i + " 不是一个正整数");
return;
}
// 初始化最小的质数k为2
int k = 2;
// 打印开始的数字
System.out.print(i + "=");
// 当i大于1时继续分解
while (i > 1) {
// 如果i能被k整除
if (i % k == 0) {
// 打印质因数k
System.out.print(k);
// 如果number能被k整除多次,则继续除以k
while (i % k == 0) {
i /= k;
}
// 如果不是最后一个质因数,则打印乘号
if (i > 1) {
System.out.print("*");
}
}
// 如果不能被k整除,则k加1
k++;
}
}
}
5.学习成绩表示
利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
public class Grade {
public static void main(String[] args) {
int score = 85;
char grade = (score >= 90) ? 'A' : (score >= 60) ? 'B' : 'C';
System.out.println("学生成绩为:" + score + "分," + "等级为" + grade);
}
}
6.求最大公约数和最小公倍数
输入两个正整数m和n,求其最大公约数和最小公倍数。
在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数
第一种方法:(辗转相除)
Scanner scanner = new Scanner(System.in);
// 输入第一个数字
System.out.print("输入第一个正整数(m): ");
int m = scanner.nextInt();
// 输入第二个数字
System.out.print("输入第二个正整数(n): ");
int n = scanner.nextInt();
int temp = 0,x = m, y = n;
if (m < n) {
temp = m;m = n;n = temp;
}
while (m % n != 0) {
temp = m % n;
m = n;
n = temp;
}
System.out.println("最大公约数:" + n);
System.out.println("最小公倍数:" + x*y/n);
第二种方法(从大到小)
Scanner scanner = new Scanner(System.in);
// 输入第一个数字
System.out.print("输入第一个正整数(m): ");
int m = scanner.nextInt();
// 输入第二个数字
System.out.print("输入第二个正整数(n): ");
int n = scanner.nextInt();
int min=m<n?m:n; //找出最小数
for(int i=min;i>0;i--){ //从大到小除
if(m%i==0&n%i==0){
min=i;
break; //第一个就是最大公约数,break跳出
}
}
int max=m*n/min; //最小公倍数
System.out.println("最大公约数:"+min);
System.out.print("最小公倍数:"+max);
7.统计
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
Scanner scanner = new Scanner(System.in);
System.out.print("输入字符串: ");
String input = scanner.nextLine();
int letterCount = 0;
int spaceCount = 0;
int digitCount = 0;
int otherCount = 0;
// 遍历输入字符串中的每个字符
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
if (Character.isLetter(ch)) {
letterCount++;
} else if (Character.isDigit(ch)) {
digitCount++;
} else if (Character.isSpaceChar(ch)) {
spaceCount++;
} else {
otherCount++;
}
}
// 输出计数
System.out.println("字母的个数为: " + letterCount);
System.out.println("数字的个数为: " + digitCount);
System.out.println("空格的个数为: " + spaceCount);
System.out.println("其他字符个数为: " + otherCount);
8.几个数相加有键盘控制
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制
Scanner sc = new Scanner(System.in);
// 输入数字 a
System.out.print("请输入数字 a:");
int a = sc.nextInt();
// 输入相加的项数 n
System.out.print("请输入相加的项数 n:");
int n = sc.nextInt();
// 计算 s 的值
int sum = 0;
int temp = 0;
for (int i = 1; i <= n; i++) {
// 计算当前项的值
temp = temp * 10 + a;
sum += temp;
}
// 输出结果
System.out.println("s = " + sum);
9.完数
题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数
方法1
public static void main(String[] args) {
System.out.println("1到1000以内的所有完数:");
for (int i = 1; i < 1000; i++) {
int t = 0;
for (int j = 1; j <= i/2; j++) {
if (i % j == 0) {
t = t + j;
}
}
if (t == i) {
System.out.println(i + " ");
}
}
}
方法2
public static void main(String[] args) {
System.out.println("1到1000以内的所有完数:");
for (int i = 1; i <= 1000; i++) {
if (isNumber(i)) {
System.out.println(i);
}
}
}
// 判断一个数是否是完数
public static boolean isNumber(int num) {
if (num <= 1) {
return false;
}
int sum = 1; // 1 是所有数的因子,从2开始找因子
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
sum += i;
if (i != num / i) {
sum += num / i;
}
}
}
return sum == num;
}
10.自由落地
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
方法1
public static void main(String[] args) {
double h = 100;
double s = 100;
for (int i = 1; i < 10; i++) {
s = s + h;
h = h / 2;
}
System.out.println("经过的路程:" + s);
System.out.println("反弹的高度:" + h);
}
方法2
public class Jemp {
public static void main(String[] args) {
double height = 100; // 初始高度,单位为米
int n = 10; // 第10次落地
double sum = 0;
for (int i = 1; i <= n; i++) {
// 落地时的距离累加
sum += height;
// 如果不是最后一次落地,计算反弹高度和更新下次落地的高度
if (i < n) {
height /= 2; // 反弹高度是上次落地高度的一半
sum += height; // 反弹后再落地,距离再加上反弹高度
}
}
System.out.println("第10次落地时,共经过的距离:" + sum + " 米");
System.out.println("第10次反弹的高度:" + height + " 米");
}
}
标签:练习题,Java,int,System,更新,print,println,public,out
From: https://blog.csdn.net/Dddddppp/article/details/140873565