一、描述
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+"万元。");
}
}
运行结果: