標籤:三個數的排序 java原始碼 按照日期計算是一年的第幾天 平方和開方
一、描述
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);}}
運行結果:
JAVA基礎編程50題(13-15題)詳解