程序一
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
本题需要用到递归思想,而这题的核心是:a[n]=a[n-1]+a[n-1]
代码如下:
package code.test;
import java.util.*;
class test01 {
public static void main(String[] args) {
System.out.println("请输入兔子数量的月份");
Scanner sc=new Scanner(System.in);
int month=sc.nextInt();
System.out.println("第" + month + "个月兔子总数为" + clacRabbitNum(month));
}
//定义方法
public static int clacRabbitNum(int month){
if(month==1||month==2){
return 1;
}else{
return clacRabbitNum(month-1)+clacRabbitNum(month-2);
}
}
}
程序二
题目:判断101-200之间有多少个素数,并输出所有素数。
package code.test;
//题目:判断101-200之间有多少个素数,并输出所有素数。
public class test02 {
public static void main(String[] args) {
int sum = 0;
for (int i = 100; i < 200; i++) {
if (prime(i)) {
//判断这个数是不是素数
System.out.print(i + " ");
sum++;
if (sum % 5 == 0) {
//被五整出换行
System.out.println();
}
}
}
System.out.println();
System.out.println("素数的个数:" + sum);
}
//判断这个数是不是素数的代码
private static boolean prime(int i) {
for (int j = 2; j <=Math.sqrt(i); j++) {
if (i % j == 0) {
//如果能整除,就说明不是素数,可以马上中断,继续对下一个数判断
return false;
}
}
return true;
}
}
程序三
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:
153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
package code.test;
public class test03 {
public static void main(String[] args) {
int Sum=0;
for (int i = 100; i < 1000; i++) {
if (sum(i)){
System.out.print(i + " ");
Sum++;
}
}
System.out.println();
System.out.println("是水仙花的个数为:"+Sum);
}
//判断水仙花数
private static boolean sum(int j) {
int a=j/100; //确定百位数字
int b=(j%100)/10; //十位数字
int c=j%10; //个位数字
int d= a*a*a+b*b*b+c*c*c;
if ( d == j)
return true;
else
return false;
}
}
程序四
题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
package code.test;
import java.util.Scanner;
public class test04 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("输入一个正整数:");
int num = sc.nextInt();
System.out.print(num + "=");
int flag = 0;
for ( int i = 2; i <= num; i++) {
if ( judgePrimeNumber(i) && num % i == 0 ) {
flag++;
if ( flag == 1) {
System.out.print(i);
}else {
System.out.print("*"+i);
}
num /= i;
i--;
}
}
}
public static boolean judgePrimeNumber(int num) {
//写一个方法判断num能否被i整除
for ( int i = 2; i <= Math.sqrt(num); i++ ) {
if ( num % i == 0 ) {
return false;
}
}
return true;
}
}
程序五
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
(a>b)?a:b这是条件运算符的基本内容。
package code.test;
import java.util.*;
public class test05 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("请输入学习成绩分数:");
int grade=sc.nextInt();
gradeNu(grade);
}
private static void gradeNu(int n){
if(n<0||n>100){
System.out.println("输入无效成绩");
}else {
String s=(n>=90)?"分属于A等":((n>=60)?"分属于B等":"分属于C等");
System.out.println(n+s);
}
}
}
程序六
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
本题就是用辗转相除法求最大公约数:
(1)用大的数对小的数求余
(2)把小的数赋值给大的数,把求余获得的结果赋值给小的数
(3)循环上一步的操作,直到求余的结果为零
(4)上一步被求余的数就是我们要的最大公约数
然后两数相乘再除以最大公约数就是最小公倍数
package code.test;
import java.util.*;
public class test06 {
public static void main(String[] args) {
int m, n;
Scanner sc = new Scanner(System.in);
System.out.println("输入两个正整数:");
m = sc.nextInt();
n = sc.nextInt();
//求最大公约数的方法
int x=PCM(m,n);
System.out.println("最大公约数为:"+x);
//求最小公倍数,最小公倍数就是两个数的乘积除以最大公约数
int y=m*n/x;
System.out.println("最小公倍数为:"+y);
}
//用辗转法求最大公约数
public static int PCM(int a, int b) {
if (a < b) {
int temp = a;
a = b;
b = temp;
while (b != 0) {
if (a == b) {
} else {
int k = a % b;
a = b;
b = k;
}
}
}
return a;
}
}
程序七
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
package code.test;
import java.util.*;
public class test07 {
public static void main(String[] args) {
int letter=0;
int number=0;
int space=0;
int other=0;
Scanner scan=new Scanner(System.in);
System.out.println("输入数据:");
String str=scan.nextLine();
char[] ch = str.toCharArray();
for(int i=0;i<ch.length;i++){
if(Character.isLetter(ch[i])){
//判断是否字母
letter++;
}
else if(Character.isDigit(ch[i])){
//判断是否数字
number++;
}
else if(Character.isSpaceChar(ch[i])){
//判断是否空格键
space++;
}
else{
//以上都不是则认为是其他字符
other++;
}
}
System.out.println("字母个数:"+letter);
System.out.println("数字个数:"+number);
System.out.println("空格个数:"+space);
System.out.println("其他字符个数:"+other);
}
}
程序八
题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
首先确定a的值,然后有n个a,最后考虑第1和第2项相差210,第2和第三项相差2100,第k和第k+1项相差2*(10的k次方)
package code.test;
import java.util.*;
public class test08 {
public
static void main(String[] args) {
int n = 0, a = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入a的值:");
a = scanner.nextInt();
System.out.println("请输入n的值:");
n = scanner.nextInt();
int[]
arr = new
int[n];//创建数组长度为输入的项数
int
i = 1;//while循环初始化的值
arr[0] = a;//数组的第一个值为3
//把每一项的值赋值给数组里面的数
while (i < n) {
a *= 10;
arr[i] = a + arr[i - 1];
i++;
}
//求和
int
sum = 0;
for (int s:arr) {
sum += s;//累加求和
if (s == arr[n - 1]) {
System.out.print(s);
break;//最后一次只输出结果
}
System.out.print(s + "+");//前面的值输出结果,后面还要加一个加号
}
System.out.println("=" + sum);
}
}
程序九
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
package code.test;
public class test09 {
public
static void main(String[] args) {
System.out.println("1000以内的因数有:");
for (int i = 1; i <=1000;i++) {
int sum=0;//所有因数的总和
for (int j = 1; j < i/2+1; j++) {
if (i%j==0) {
//判断范围内的所有j相加,就是因数总和
sum+=j;
}
}
if (i==sum) {
System.out.print(i+" ");
}
}
}
}
程序十
题目:一球从h米高度自由落下,每次落地后反跳回原高度的一半;
再落下,求它在 第n次落地时,共经过多少米?第n次反弹多高?
注意第n次反弹的高度:(1/2)的n次方*h
然后第n次落地经过: h+(h/2)*2+(h/2/2)*2 +…+h/(2的n-1次方)*2
package code.test;
import java.util.*;
public class test10 {
public static void main(String[] args) {
System.out.println("请输入小球下落的高度和落地的次数:");
Scanner scanner

本文列举并解析了50道经典的Java编程题目,涵盖递归、算法、数学逻辑等多个方面,旨在帮助读者提升编程技能。题目包括:兔子繁殖问题、素数判断、水仙花数、分解质因数、最大公约数和最小公倍数计算、字符统计、完数查找、反弹高度计算、数字排序、菱形图案、回文数判断、数组操作、字符串处理和杨辉三角形等。
最低0.47元/天 解锁文章
6万+

被折叠的 条评论
为什么被折叠?



