JAVA基础编程50题(10-12题)具体解释

一、描写叙述

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+"万元。"); } }

执行结果:

奖金

posted @ 2015-12-20 17:31  phlsheji  阅读(1020)  评论(0编辑  收藏  举报