java经典40道编程题(1~10)

众所周知,逻辑思维能力是一个程序员非常重要的一种能力。因为它往往决定了你工作的效率和学习的效率,甚至是职业的高度。所以,提升自己的思维能力是每个程序员的必修课。提升思维能力对我们大有裨益。不管在哪一行哪一业,较强的逻辑思维能力都能让你脱颖而出,出色地完成工作!接下来,我会陆续更新一些Java中经典的编程题来帮助大家提升自己。
在这里插入图片描述

#第一题

菲波拉契数列:

  • 有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

参考答案

package clasicaltest;

import java.util.Scanner;

/*
 * 菲波拉契数列:
 * 有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
 */

public class Test1 {
	public static void main(String[] args) {
		int month,number;
		System.out.println("请问是第几个月兔子的数量?");
		Scanner sc=new Scanner(System.in);
		month=sc.nextInt();		
		number=fibo(month);
		System.out.println("第"+month+"个月的兔子数为:"+number);
		sc.close();
	}

	private static int fibo(int month) {
		int f;
		if(month==1||month==2) {//递归结束条件
			f=1;
		}else {
			f=fibo(month-1)+fibo(month-2);//递归调用
		}
		return f;
	}

}

第二题:

  • 判断 101-200 之间有多少个素数,并输出所有素数。
    参考答案
package clasicaltest;
/*
 * 判断 101-200 之间有多少个素数,并输出所有素数。
 */
public class Test2 {
	public static void main(String[] args) {
		int i,j,k=0,h=0;//k用来判断被整除数的个数,h用来控制1行输出的数字个数
		for(i=101;i<200;i++) {//查找101至200的素数
			for(j=1;j<=i;j++) {
				if(i%j==0) {
					k++;
				}
			}
			if(k==2) {//2代表i为素数
				System.out.print(i+" ");
				h++;
				if(h==5) {//5个数字后换行
					System.out.println();
					h=0;//重置h
				}
			}
			k=0;
		}
	}
	
}

第三题

  • 打印所有的水仙花数
    参考答案
package clasicaltest;
/*
 * 打印所有的水仙花数
 */
public class Test3 {
	public static void main(String[] args) {
		int i,j,k;
		int number;
		for(number=100;number<1000;number++){
			i=number/100;//获取百位数
			j=(number/10)%10;//获取十位数
			k=number%10;//获取个位数
			if(i*i*i+j*j*j+k*k*k==number){//判断是否为水仙花数?
				System.out.println(number+" ");//输出水仙花数
			}
		}	
}

}

第四题

题目:将一个正整数分解质因数。例如:输入 90,打印出 90=233*5
*参考答案

package clasicaltest;

import java.util.*;

/*
 * 题目:将一个正整数分解质因数。例如:输入 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 Test4 {
	public static Scanner input = new Scanner(System.in);

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.err.println("请输入一个数:");
		int x = input.nextInt();
		System.out.print(x + "= ");
		int i = 2;
		while (i <= x) { // 使用循环来找到可以被整除的数,然后通过out函数输出
			if (i == x)// 如果相等的话,就说明这个数没有因数,只有1和它自己;
			{
				System.out.println(i);
				break;
			} else if (x % i == 0)// 如果这个数有因数,然后找到除去这个因数后的值,继续循环
			{
				System.out.print(i + "*");
				x = x / i;
			} else // 如果都不满足,则继续循环,
			{
				i++;
			}
		}
	}
}

第五题

三目运算符:利用条件运算符的嵌套来完成此题:学习成绩> =90 分的同学用 A 表示,60-89 分之间的用 B 表示,60 分以下的用 C 表示。
*参考答案

package clasicaltest;

import java.util.Scanner;

/*
 * 三目运算符:利用条件运算符的嵌套来完成此题:学习成绩> =90 分的同学用 A 表示,60-89 分之间的用 B 表示,60 分以下的用 C 表示。
 */
public class Test5 {
	public static Scanner input = new Scanner(System.in);

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.err.println("请输入一个成绩:");
		int x = input.nextInt();
		char grade = (x >= 90) ? 'A' : (x >= 60) ? 'B' : 'C';
		System.out.println("该学生的成绩水平是:\t" + grade);
	}
}

第六题

题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数
*参考答案

package clasicaltest;
/*
 * 题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数
 */

import java.util.Scanner;

public class Test6 {

	public static void main(String[] args) {
		System.out.println("求最大公约数和最小公倍数");
		Scanner sc = new Scanner(System.in);
		System.out.print("输入第一个数:");
		int number1 = sc.nextInt();
		System.out.print("输入第二个数:");
		int number2 = sc.nextInt();
		int number3 = number2;// 用number3保留第二个数
		int number4 = number1;// 用number3保留第1个数
		// 求最大公约数
		// 设用户输入的两个整数为number1和number2,且number1>number2,余数i=number1%number2。
		// 当余数不为0时,把除数赋给number1做被除数,把余数赋给number2做除数,
		// 再求得新余数,若还不为0再重复直到余数为0,此时number2就是最大公约数
		if (number1 < number2) {// 互换
			int z = number1;
			number1 = number2;
			number2 = z;
		}
		int i = number1 % number2;
		while (i != 0) {
			number1 = number2;
			number2 = i;
			i = number1 % number2;
		}
		System.out.println("最大公约数为:" + number2);
		System.out.println("最小公倍数为:" + (number4 * number3) / number2);// 最小公倍数=两个数相乘/最大公约数
		sc.close();
	}
}

第七题

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
参考答案

package clasicaltest;
/*
 * 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
 */
import java.util.Scanner;

public class Test7 {
	public static Scanner input = new Scanner(System.in);

	public static void main(String[] args) {
		System.out.println("请输入一行字符串:");
		String str = input.nextLine();
		int digital = 0, character = 0, other = 0, blank = 0;
		char[] ch = str.toCharArray();// String的方法,将字符串转换为字符数组;
		for (int i = 0; i < ch.length; i++) {
			if (ch[i] >= 'a' && ch[i] <= 'z' || ch[i] >= 'A' && ch[i] <= 'Z')
				character++;
			else if (ch[i] >= '0' && ch[i] <= '9')
				digital++;
			else if (ch[i] == ' ')
				blank++;
			else
				other++;
		}
		System.out.println("字母个数:" + character);
		System.out.println("数字个数:" + digital);
		System.out.println("空格个数:" + blank);
		System.out.println("其他个数:" + other);
	}

}

第八题

求 s=a+aa+aaa+aaaa+aa…a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此时共有 5 个数相加),几个数相加由键盘控制

参考答案

package clasicaltest;
/*
 * 求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此时共有 5 个数相加),几个数相加由键盘控制
 */
import java.util.Scanner;

public class Test8 {
	 public static Scanner input = new Scanner(System.in);
	    public static void main(String[] args) {
	        System.out.println("请输入个位数字a:");
	        int single = input.nextInt();
	        int a=single;
	        System.out.println("请输入最高位数:");
	        int max = input.nextInt();
	        int n=max;
	        int sum = 0,temp = 0;
	        for (int i = 0; i < max; i++) {
	            temp = single + temp;    //先把本次要加的值赋值给temp;
	            single *= 10;            //每次把单数乘以10,向前进一位,加上之前的temp正好满足需要
	            sum = sum + temp;        //把每次的temp相加起来就是要的结果
	        }
	        System.out.println("数字"+a+"共有"+n+"个数相加的结果为:"+sum);
	    }
}

第九题

一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如 6=1+2+3.编程找出 1000 以内的所有完数

参考答案

package clasicaltest;

/*
 * 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如 6=1+2+3.编程找出 1000 以内的所有完数
 */
public class Test9 {
	public static void main(String[] args) {
		System.out.println("0~1000内的完数为:");
		for (int i = 1; i <= 1000; i++) {
			int sum = 0;
			for (int j = 1; j <= i / 2; j++) {// 因子只能在1~i/2里面找
				if (i % j == 0) {
					sum = sum + j;// 将因子相加
				}
			}
			if (sum == i) {
				System.out.print(i + "  ");
			}

		}
	}
}

第十题

一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10 次落地时,共经过多少米?第 10 次反弹多高?

参考答案

package clasicaltest;
/*
 * 一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10 次落地时,共经过多少米?第 10 次反弹多高?
 */
public class Test10 {
	public static void main(String[] args) {
		double height=100;//原始高度
		double chheight=0;//弹跳后高度
		double sum=0;//落下后在弹起的高度,之后还没落下
		double allsum=0;//全过程经过的路程
		for(int i=1;i<=10;i++) {
			chheight=height/2;//每次弹起的高度为上次的一半
			System.out.println("第"+i+"次反弹高度为:"+chheight);
			sum=height+chheight;
			System.out.println("经过了"+sum+"米");
			allsum+=height+chheight;
			height=chheight;//将新的弹跳高度赋给初始高度			
		}
		System.out.println("全过程共经过了"+allsum+"米");
	}

}

休息一下,稍后更加精彩!
在这里插入图片描述

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值