码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-03-19 16:24:11      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:java基础编程题   斐波那契数列   判断素数   水仙花数   源代码   

一、题目描述

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;
		}


}


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

标签:java基础编程题   斐波那契数列   判断素数   水仙花数   源代码   

原文地址:http://blog.csdn.net/tongyuehong137/article/details/44458267

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!