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); } }
运行结果:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。