JAVA基础编程50题(1-3题)详解

一、题目描述

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

程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... ,该题其实就是斐波那契数列的一种。

2、判断m-n之间有多少个素数,并输出所有素数。

程序分析:判断素数的方法:用一个数n分别去除2到sqrt(n),这里是Math自带的函数sqrt()求该数的平方根,如果能被整除,则表明此数不是素数,反之是素数。

3、打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位,然后判断是否满足各位数字立方和等于该数本身。

二、JAVA源代码

1、程序1

package tong.yue.hong;

import java.util.Scanner;

import javax.xml.transform.Templates;

/**
 * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
总之,除了第一个和第二个月兔子数量为1,其他月份是前两个月份兔子对数之和。
 * @author tong
 *
 */
public class Fibonacci {

	public static void main(String[] args) {
		System.out.println("请输入第几个月:");
		Scanner scanner = new Scanner(System.in);
		String month = scanner.nextLine();
		diedai(Integer.parseInt(month));
		digui(Integer.parseInt(month));
		System.out.println("第"+month+"个月有兔子"+digui(Integer.parseInt(month))+"对");

	}

	/**
	 * 使用递归的方法求该数列,源代码简单,但是效率比较低,内存消耗大
	 * @param parseInt
	 * @return
	 */
	private static int digui(int parseInt) {
		if(parseInt==1||parseInt==2){
			return 1;
		}else{
			return digui(parseInt-1)+digui(parseInt-2);
		}

	}
	/**
	 * 使用普通的方法,根据该数列的特性,除了第一个和第二个月兔子数量为1,其他月份是前两个月份兔子对数之和。
	 * @param parseInt
	 */
	private static void diedai(int parseInt) {
		int first = 1;
		int second = 1;
		int temp = 0;
		for (int i = 3; i <=parseInt; i++) {
			temp = first;
			first = second;
			second = temp+second;
			System.out.println("第"+i+"个月有兔子"+second+"对");

		}
	}

}

2、程序二

package tong.yue.hong;

import java.util.Scanner;

/*
 * 题目:判断m-n之间有多少个素数,并输出所有素数。
         程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
 */
public class Sushu {

	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入数字下限:");
		int low = scanner.nextInt();
		System.out.println("请输入数字上限:");
		int high = scanner.nextInt();
		if (low>high) {
			System.out.println("您输入的数据有误,请重新输入!");
			System.out.println("请输入数字下限:");
			low = scanner.nextInt();
			System.out.println("请输入数字上限:");
			high = scanner.nextInt();
		}
		System.out.println(low+"-"+high+"之间的所有素数:");
		int count = 0;
		for (int i = low; i <= high; i++) {
			if(isPrime(i)){
				count ++;
				System.out.print(i+" ");
				//每输出10个素数就换行,便于观察
				if(count%10==0){
					System.out.println();
				}
			}
		}
		System.out.println("\n总共"+count+"个素数");

	}
	/**
	 * 该方法用来判断一个数是否为素数,判断条件是将该数除以从2开始到sqrt(该数),只要有一个能整除就不是素数,所有数都不能整除即素数
	 * @param i
	 * @return
	 */
	private static boolean isPrime(int i) {
		if (i==1) {
			return false;
		}
		for (int j = 2; j < Math.sqrt(i); j++) {
			if(i%j==0){
				return false;
			}
		}
		return true;
	}

}

3、程序3

package tong.yue.hong;
/**
 * 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
 * @author Administrator
 * */
public class Shuixianhua {

	public static void main(String[] args) {
		System.out.println("100-999之间的水仙花数:");
		//使用isShuixianhua()方法
		for (int i = 100; i < 1000; i++) {
			if(isShuixianhua(i)){
				System.out.print(i+" ");
			}
		}
		System.out.println("\n100-999之间的水仙花数:");
		//使用isLotus()方法
		for (int i = 100; i < 1000; i++) {
			if(isLotus(i)){
				System.out.print(i+" ");
			}
		}

	}
	/**
	 * 这里调用java自带的pow()方法求一个数的3次方
	 * @param i
	 * @return
	 */
	private static boolean isShuixianhua(int i) {
		//获取个位:i%10,获取十位:i/10%10,获取百位:i/100
		int sum = (int)(Math.pow(i%10, 3)+Math.pow(i/10%10, 3)+Math.pow(i/100, 3));
		if (i==sum) {
			return true;
		}
		return false;
	}

	/**
	 * 这里根据各位的数据关系将每个位上的数字取出并判断
	 * @param num
	 * @return
	 */
	private static boolean isLotus(int num){
		int m = 0;
		int n = num;
		int sum = 0;
		//获取百位
		m = n/100;
		//源数据减去百位数乘以100就剩下十位和个位
		n  -= m*100;
		//百位数求立方
		sum = m*m*m;
		//获取十位
		m = n/10;
		//数据减去十位的部分就剩下个位的数据
		n -= m*10;
		//判断各位数字立方和等于该数本身
		sum += m*m*m + n*n*n;
		if(sum==num)
			return true;
		else
			return false;
		}

}
时间: 2024-10-13 17:14:37

JAVA基础编程50题(1-3题)详解的相关文章

JAVA基础编程50题(4-6题)详解

一.描述 1.将一个正整数分解质因数.例如:输入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的值,重复执行第一步. 2.利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之

JAVA基础编程50题(22-24题)详解

一.描述 题目1:统计输入的一段字符串,分别统计这个字符串中大小写字母的个数,以及数字出现的次数. 第一种方法使用Character封装类的方法:isLowerCase(),isUpperCase(),isDigit()判断是否是该类字符, 第二种方法是直接使用char字符范围比较来统计. 题目2:用户输入一串待统计的字符串,然后输入用户想要统计的某个单词或者字符的次数. 比如我输入如下字符串:fdhiaojavajidaoijdjava 我要统计其中的java字符串的个数. 解题思路:传入待统

JAVA基础编程50题(7-9题)详解

一.描述 1.输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的总个数和每个字符出现的频率. 程序分析:使用String类的matchs()分别统计符合正则表达式的每类字符的总个数,然后分别使用List和Map集合类统计每个字符出现的频率. 2.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制. 3.题目:一个数如果恰好等于它的因子之和,这个数就称为"完数",即除了本身

JAVA基础编程50题(13-15题)详解

一.描述 1.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方,如果开方后再平方等于原数则符合结果. 2.输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天. 3.输入三个整数x,y,z,请把这三个数由小到大输出. 程序分析:将最小的数放到x上,先

JAVA基础编程50题(25-27题)详解

一.描述 题目1:判断一个数字是否是2的阶次方数,例如8,16,64,256都是2的阶次方数. 题目解析:如果一个数是2的阶次方数,那么这个数字的二进制数的首位为1,后面跟着若干个0,例如8用二进制表示为1000,64为1000000, 如果让这个数减1,然后和这个数做按位&运算即得0,即(number-1)&number==0,8&7=1000&0111=0000. 题目2:列出一个数组中所有元素的组合,比如1.2.3列出来为1.12.123.13.132.2.21.21

JAVA基础编程50题(10-12题)详解

一.描述 1.一球从m米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在 第n次落地时,共经过多少米?第10次反弹多高? 2.有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.但是必须满足每一位上的数字各不相同,根据排列组合原理总共有4*3*2=24种. 3.企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高

java基础编程题

java基础编程题 1.打印出如下图案 1 public class Prog19{ 2 public static void main(String[] args){ 3 int n = 5; 4 printStar(n); 5 } 6 7 //打印星星 8 private static void printStar(int n){ 9 //打印上半部分 10 for(int i=0;i<n;i++){ 11 for(int j=0;j<2*n;j++){ 12 if(j<n-i) 1

6、50道JAVA基础编程练习题跟答案

1 50道JAVA基础编程练习题 2 [程序1] 3 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 4 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 5 public class Prog1{ 6 public static void main(String[] args){ 7 int n = 10; 8 System.out.println("第"+n+

50道JAVA基础编程练习题

50道JAVA基础编程练习题[程序1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....public class Prog1{public static void main(String[] args){ int n = 10; System.out.println("第"+n+"个月兔子总数为"+f