題目:有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);
}
}