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

一、描述

1、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方,如果开方后再平方等于原数则符合结果。

2、输入某年某月某日,判断这一天是这一年的第几天?

        程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

3、输入三个整数x,y,z,请把这三个数由小到大输出。

        程序分析:将最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。


二、源代码

1、程序1

package tong.yue.hong;
/**
 * 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
	程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方,如果开方后再平方等于原数则符合结果。
 * @author tong
 *
 */


public class SquareNumber {


	public static void main(String[] args) {
		int result=0;
		for(int i=0;i<100001;i++){
			if(isCompSqrt(i+100) && isCompSqrt(i+168)){
				result = i;
				break;
			}
		}
		System.out.println("所求的数是:"+result);
		System.out.println("----------");
		
		for(int i=0;i<100001;i++){
			if(isCompSqrt(i+100) && isCompSqrt(i+168)){
				result = i;
				break;
			}
		}
		System.out.println("所求的数是:"+result);


	}
	//判断完全平方数,采用循环枚举法,效率比较低
	private static boolean isCompSqrt(int n){
		boolean isComp = false;
		for(int i=1;i<Math.sqrt(n)+1;i++){
			//将该数开平方后,在1至该数平方根之间找一个数,该数的平方等于被判断的数
			//调用java的Math.pow(i,2)函数,求i的平方
			if(n==Math.pow(i,2)){
				isComp = true;
				break;
			}
		}
		return isComp;
	}
	
	//判断完全平方数,采用开方后取整与原数相等来判断
		private static boolean isSqrt(int n){
			double result = Math.sqrt(n);
			if (result==(int)result) {
				return true;
			}else {
				return false;
			}
		}


}

运行结果:

开方


2、程序2

package tong.yue.hong;


import java.util.Scanner;


/**
 * 输入某年某月某日,判断这一天是这一年的第几天?
	程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
 * @author tong
 *
 */
public class Days {


	public static void main(String[] args) {
		//以非数字字符作为间隔符
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个日期:年(4位)——月(1-12)——日(1-31):");
		int year = scanner.nextInt();
		while(year<0||year>2050){
			System.out.println("输入年份不符合要求,请根据现实年份进行输入:");
			year = scanner.nextInt();
		}
		int month = scanner.nextInt();
		while(month<0||month>12){
			System.out.println("输入月份不符合要求,请根据现实年份(1-12)进行输入:");
			month = scanner.nextInt();
		}
		int day = scanner.nextInt();
		while(day<0||day>31){
			System.out.println("输入日期不符合要求,请根据现实年份(1-31)进行输入:");
			day = scanner.nextInt();
		}
		scanner.close();
		
		computeDateByArray(year,month,day);
		computeDateByCirculation(year,month,day);
		


	}
	//使用switch语句判断月份并且输出结果
	private static void computeDateByCirculation(int year, int month, int day) {
		
		int days = 0;
		for (int i = 1; i < month; i++) {
			switch (i) {
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				days +=31;
				break;
			case 4:
			case 6:
			case 9:
			case 11:
				days +=31;
				break;
			case 2:
				if (year%400==0||year%4==0&&year%100!=0) {
					days +=29;
				}else {
					days +=28;
				}
			
			}
		}
		System.out.println(year+"-"+month+"-"+day+"是该年的第"+(days+day)+"天。");
		
	}
	
	//将每个月的天数存储在一个数组中,循环取出数组的值添加到天数
	private static void computeDateByArray(int year, int month, int day) {
		
		int[] daysPerMonth = {31,28,31,30,31,30,31,31,30,31,30,31};
		//闰年的判断,能被400整除,或者能被4整除不能被400整除,闰年二月29天,平年28天
		if (year%400==0||year%4==0&&year%100!=0) {
			daysPerMonth[2] = 29;
		}
		int days = 0;
		for (int i = 1; i < month; i++) {
			//数组是以0索引开始的,所以下标减一
			days +=daysPerMonth[i-1];
		}
		System.out.println(year+"-"+month+"-"+day+"是该年的第"+(days+day)+"天。");
		
		
	}


}

运行结果:

日期


3、程序3

package tong.yue.hong;


import java.util.Scanner;


/**
 * 输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
 * @author tong
 *
 */


public class SortThreeNum {


	public static void main(String[] args) {		
		Scanner scanner = new Scanner(System.in);		
		System.out.println("请输入第一个整数:");
		int x = scanner.nextInt();
		System.out.println("请输入第二个整数:");
		int y = scanner.nextInt();
		System.out.println("请输入第三个整数:");
		int z = scanner.nextInt();
		scanner.close();
		sort(x,y,z);
		sort2(x, y, z);
		


	}
	
	   //比较三个数的大小,先将最小值放在x变量中,然后再比较y和z位置数据的大小
		private static void sort(int x,int y,int z){
			
			if(x>y){
				int t = x;
				x = y;
				y = t;
			}
			if(x>z){
				int t = x;
				x = z;
				z = t;
			}
			if(y>z){
				int t = z;
				z = y;
				y = t;
			}
			System.err.println("三个整数排序后的结果为:"+x+" "+y+" "+z);
		}
		
		//比较三个数的大小
		private static void sort2(int x,int y,int z){
			if (x>y) {
				int temp = x ;
				x = y;
				y = temp;
				
			}
			//以上的步骤表示x和y中小的数放在x变量中,现在若是z比x小,则z就是最小值,x次之,y最大
			if (x>z) {
				int temp = x ;
				x = z;
				z = y;
				y = temp;
			}else {
				//现在若是z比x大,则x就是最小值,z和y继续比较大小
				if (z<y) {
					int temp = y ;
					y = z;
					z = temp;
				}
			}
			System.err.println("三个整数排序后的结果为:"+x+" "+y+" "+z);
		}


}

运行结果:

从小到大输出


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值