Java經典五十道題11到20題

【程序11】 
題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少? 
1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去 掉不滿足條件的排列。




【程序12】  
題目:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數? 
1.程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。




【程序13】FindNumber.java 
題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少? 
1.程序分析:在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後的結果滿足如下條件,即是結果。請看具體分析:




【程序14】 
題目:輸入某年某月某日,判斷這一天是這一年的第幾天? 
1.程序分析:以3月5日爲例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大於3時需考慮多加一天。




【程序15】
題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。 
1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,然後再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。




【程序16】 
題目:輸出9*9口訣。 
1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。




【程序17】MonkeyEatPeach.java 
題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個 第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。 
1.程序分析:採取逆向思維的方法,從後往前推斷。




【程序18】 
題目:兩個乒乓球隊進行比賽,各出三人。甲隊爲a,b,c三人,乙隊爲x,y,z三人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。 
1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除, 則表明此數不是素數,反之是素數。




【程序19】
題目:打印出如下圖案(菱形) 
      * 
    *** 
  ***** 
******* 
  ***** 
    *** 
      * 
1.程序分析:先把圖形分成兩部分來看待,前四行一個規律,後三行一個規律,利用雙重 for循環,第一層控制行,第二層控制列。




【程序20】 
題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。 

1.程序分析:請抓住分子與分母的變化規律。

package javaimprove011;
/*
 * 【程序11】 TestTN.java 
題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少? 
1.程序分析:這道題我不太理解這個題目,那麼久簡單以我的理解用1234這4個數字組成互相不重複數字的三位數並且輸出,若是有不對,歡迎指正。
 */
public class Duplicate {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int i=1;i<5;i++)
			for(int j=1;j<5;j++)
			{
				for(int k=1;k<5;k++)
				{
					if(i!=j&&j!=k&&i!=k)
						System.out.printf("%d\t", 100*k+10*j+i);
				}
				System.out.println();
			}
	}

}
package javaimprove012;

import java.util.Scanner;

/*
 * 【程序12】 MoneyAward.java 
題目:企業發放的獎金根據利潤提成。
利潤(I)低於或等於10萬元時,獎金可提10%;
利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提成7.5%;
20萬到40萬之間時,高於20萬元的部分,可提成5%;
40萬到60萬之間時高於40萬元的部分,可提成3%;
60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於100萬元時,超過100萬元的部分按1%提成,
從鍵盤輸入當月利潤I,求應發放獎金總數?
問題分析:這個問題本身很簡單,實現的方法也有好幾種也比較簡單。
 */
public class Award {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("請輸入當月利潤(萬元):");
		Scanner in=new Scanner(System.in);
		int profit=in.nextInt();
		System.out.printf("應發獎金爲:%f萬元", profit<=10?
				(profit*0.1):(profit<=20?10*0.1+(profit-10)*0.075:
					(profit<=40?10*0.1+10*0.075+(profit-20)*0.005:
						(profit<=60?10*0.1+10*0.075+20*0.005+(profit-40)*0.003:
							(profit<=100?10*0.1+10*0.075+20*0.005+20*0.003+(profit-60)*0.015:10*0.1+10*0.075+20*0.005+20*0.003+40*0.015+(profit-100)*0.01)))));
	}

}

package javaimprove013;
/*
 * 題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少? 
 * 問題分析:正向一一嘗試
 */
public class FindSpecial {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int n=1;n<100000000;n++)
		{
			if(Math.sqrt(n+100)%1==0&&Math.sqrt(n+100+168)%1==0)
				System.out.println(n);
		}
	}

}

package javaimprove014;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;

/*
 * 【程序14】 TestDay.java 
題目:輸入某年某月某日,判斷這一天是這一年的第幾天? 
問題分析:Java有處理日期的calendar,這樣程序就比較簡單了。
 */
public class Day {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("請輸入您所要查詢的日期(格式:2007 09 10):");
		Scanner in=new Scanner(System.in);
		//SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
		Calendar calendar=Calendar.getInstance();
		//月份初始爲0,所以爲了得到我們需要的準確時間我們要在在這裏減一
		int year=in.nextInt();
		calendar.set(year,in.nextInt()-1,in.nextInt());
		Date date=calendar.getTime();
		calendar.set(year,00,00);//這一年的0時開始
		Date begindate=calendar.getTime();
		//求之間的日期差
		long day=(date.getTime()-begindate.getTime())/(24*60*60*1000);
		System.out.printf("這是一年的第%d天\n",day);
	}

}

package javaimprove015;

import java.util.Arrays;
import java.util.Scanner;

/*
 * 題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。
 * 問題分析:Java中本身就有排序的方法可以直接調用,但是也可以自己想想有什麼方法可以實現快速排序,
 * 在數據結構中有幾種基礎的算法大家可以瞭解一下。當然只有三個數,也就不談什麼優劣了。
 */
public class Sort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("請輸入三個整數:");
		Scanner in=new Scanner(System.in);
		int[] array=new int[3];
		array[0]=in.nextInt();
		array[1]=in.nextInt();
		array[2]=in.nextInt();
		Arrays.sort(array);//利用數組,直接進行排序。這在數據很少的時候直接使用比較簡單。
		System.out.printf("%d,%d,%d",array[0],array[1],array[2]);
		
	}

}

package javaimprove016;
/*
 * 題目:輸出9*9口訣。
 */
public class MultiplicationTable {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int i=1;i<10;i++)
		{
			for(int j=1;j<10;j++)
				System.out.printf("%d*%d=%2d   ",j,i,i*j);
			System.out.println();
		}
	}

}

package javaimprove017;
/*
 * 題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮又多吃了一個 
 * 第二天早上又將剩下的桃子吃掉一半,又多吃了一個。
 * 以後每天早上都吃了前一天剩下的一半零一個。
 * 到第10天早上想再吃時,見只剩下一個桃子了。
 * 求第一天共摘了多少。
 * 問題分析:假如知道了初始量,這就是個遞歸的問題,因此反向思考就可以了。還是個遞歸問題,哈哈哈。
 * 當第十天的時候結束遞歸,這時候的量爲1個。這猴子真能吃!!!
 */
public class Monkey {
	public int peach(int peach,int day)
	{
		if(day==1)
			return peach;
		return peach((peach+1)*2,day-1);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Monkey monkey=new Monkey();
		System.out.printf("猴子第1天摘了%d個桃子。\n",monkey.peach(1, 10));
		System.out.printf("猴子第2天有%d個桃子。\n",monkey.peach(1, 9));
		System.out.printf("猴子第3天有%d個桃子。\n",monkey.peach(1, 8));
		System.out.printf("猴子第4天有%d個桃子。\n",monkey.peach(1, 7));
		System.out.printf("猴子第5天有%d個桃子。\n",monkey.peach(1, 6));
		System.out.printf("猴子第6天有%d個桃子。\n",monkey.peach(1, 5));
		System.out.printf("猴子第7天有%d個桃子。\n",monkey.peach(1, 4));
		System.out.printf("猴子第8天有%d個桃子。\n",monkey.peach(1, 3));
		System.out.printf("猴子第9天有%d個桃子。\n",monkey.peach(1, 2));
		System.out.printf("猴子第10天有%d個桃子。\n",monkey.peach(1, 1));
	}

}

package javaimprove018;
/*
 * 【程序18】 Prog.java 
題目:兩個乒乓球隊進行比賽,各出三人。甲隊爲a,b,c三人,乙隊爲x,y,z三人。
已抽籤決定比賽名單。有人向隊員打聽比賽的名單。
a說他不和x比,c說他不和x,z比,
請編程序找出三隊賽手的名單。
問題分析:用矩陣的思想去解決
 */
public class PingPong {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[][] abcxyz=new int[3][3];
		for(int i=0;i<3;i++)
		{
			for(int j=0;j<3;j++)
			{
				if(i==0&&j==0||i==2&&j==0||i==2&&j==2)
					abcxyz[i][j]=0;
				else
					abcxyz[i][j]=1;				
			}
		}
		System.out.println("賽事安排如下:");
		for(int i=0;i<3;i++)
		{
			for(int j=0;j<3;j++)
			{
				if(abcxyz[i][j]==1)
				{
					if(i==0)
					{
						System.out.printf("a");
					}
					if(i==1)
					{
						System.out.printf("b");
					}
					if(i==2)
					{
						System.out.printf("c");
					}
					if(j==0)
					{
						System.out.printf(" VS x\n");
					}
					if(j==1)
					{
						System.out.printf(" VS y\n");
					}
					if(j==2)
					{
						System.out.printf(" VS z\n");
					}
				}
			}
		}
	}

}

package javaimprove019;

import java.util.Scanner;

/*
 * 【程序19】LingXing.java 
題目:打印出如下圖案(菱形) 
      * 
    *** 
  ***** 
******* 
  ***** 
    *** 
      * 
問題分析:在這裏可以利用x,y也就是i,j的函數關係式來進行判斷。在我的程序中可以看出對於本題中要畫出圖像:
x(j)在座標系中相當於平時的環境中的y,一次推導出菱形的四條邊的表達式判斷範圍。
 */
public class Print {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("請輸入菱形的高度:");
		Scanner in=new Scanner(System.in);
		int size=in.nextInt();
		if(size%2==0)
		{
			size+=1;//奇數得到的圖形會更加準確一點,另外,圖形高度越大,得到的圖形也越準確
		}
		for(int i=0;i<size;i++)
		{
			for(int j=0;j<size;j++)
			{
				if(i<=size/2&&j>=size/2-i&&j<=size/2+i)
				{
					System.out.print("*");
				}else if(i>size/2&&j>=i-size/2&&j<=3*size/2-i)
				{
					System.out.print("*");
				}else
				{
					System.out.print(" ");
				}
			}
			System.out.println();
		}
		System.out.println("--------------------------------");
		for(int i=0;i<size;i++)
		{
			for(int j=0;j<size;j++)
			{
				if(j<=size/2&&i>=size/2-j&&i<=size/2+j)
				{
					System.out.print("*");
				}else
				{
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}

}
package javaimprove020;
/*
 * 【程序20】TestAdd2.java 
題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。 
問題分析:找出分數序列的規律就可以了。
 */
public class Fraction {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double up=2;
		double down=1;
		double temp;
		double sum=0;
		for(int count=1;count<=20;count++)
		{
			sum+=up/down;
			temp=down;
			down=up;
			up=temp+up;
			System.out.printf("該數列的前%d項的和爲:%f\n",count,sum);
		}
		
		System.out.printf("該數列的前二十項的和爲:%f",sum);
	}

}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章