標籤:java原始碼 球下落彈起問題 不同數字排列 不同階層獎金計算 編程
一、描述
1、一球從m米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在 第n次落地時,共經過多少米?第10次反彈多高?
2、有1、2、3、4個數字,能組成多少個互不相同且無重複數位三位元?都是多少?
程式分析:可填在百位、十位、個位的數字都是1、2、3、4。但是必須滿足每一位上的數字各不相同,根據排列組合原理總共有4*3*2=24種。
3、企業發放的獎金根據利潤提成。利潤(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、程式1
package tong.yue.hong;import java.util.Scanner;/** * 一球從m米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在 第n次落地時,共經過多少米?第10次反彈多高? * @author tong * */public class BallHeight {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.print("請輸入小球落地時的高度:");double height = scan.nextDouble();if (height<0) {System.out.print("輸入資料有誤,請重新輸入小球落地時的高度:");height = scan.nextDouble();}System.out.print("請輸入小球落地的次數:");int times = scan.nextInt();if (times<0) {System.out.print("輸入資料有誤,請重新輸入小球落地的次數:");times = scan.nextInt();}scan.close();ballDistance(height,times);}private static void ballDistance(double height, int times) {System.out.println("start height:"+height);//開始落下之前的高度,以後每次彈起和落下記為一次double sum = height;for(int i=1;i<=times;i++){height /=2.0;System.out.println("第"+i+"次,球的彈起高度為:"+height);//每次落地後反跳回原高度的一半,經過的路程為原高度的一半乘以2,因為有彈起和落下sum +=2*height;}System.out.println("第"+times+"次,落地後經過的總距離為:"+sum+"米。");}}
運行結果:
2、程式2
package tong.yue.hong;/** * 有1、2、3、4個數字,能組成多少個互不相同且無重複數位三位元?都是多少?程式分析:可填在百位、十位、個位的數字都是1、2、3、4。但是必須滿足每一位上的數字各不相同,根據排列組合原理總共有4*3*2=24種。 * @author tong * */public class PailieZuhe {public static void main(String[] args) {int count = 0;for (int i = 1; i <= 4; i++) {for (int j = 1; j <= 4; j++) {//個位和十位不能相同if (j==i) {continue;}for (int k = 1; k <= 4; k++) {//個位和百位,十位和百位不能相同if (i!=k&&j!=k) {int num = i+j*10+k*100;System.out.print(num+" ");count++;if (count%10==0) {System.out.println();}}}}}System.out.println("\n總計:"+count+"個");}}
運行結果:
3、程式3
package tong.yue.hong;import java.util.Scanner;/** * 企業發放的獎金根據利潤提成。 * 利潤(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,求應發放獎金總數? 程式分析:根據輸入的利潤判斷該利潤所屬的提成範圍,計算結果 * @author tong * */public class Salary {public static void main(String[] args) {System.out.println("請輸入當月利潤,單位為萬元:");Scanner scanner = new Scanner(System.in);double I = scanner.nextDouble();while (I<0) {System.out.println("輸入資料有誤,請重新輸入當月利潤,單位為萬元:");I = scanner.nextDouble();}scanner.close();computeBonus(I);}private static void computeBonus(double i) {double bonus = 0;//利潤(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%提成if (i<=10) {bonus = i*0.1;}else if (i<=20) {bonus = 10*0.1+(i-10)*0.075;} else if (i<=40) {bonus = 10*0.1+10*0.075+(i-20)*0.05;} else if (i<=60) {bonus = 10*0.1+10*0.075+20*0.05+(i-40)*0.03;}else if (i<=100) {bonus = 10*0.1+10*0.075+20*0.05+20*0.03+(i-60)*0.015;}else {bonus = 10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(i-100)*0.01;}System.out.println("您本月利潤為:"+i+"萬元,所得獎金為:"+bonus+"萬元。");}}
運行結果:
JAVA基礎編程50題(10-12題)詳解