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

}

运行结果:

时间: 2024-11-05 18:58:03

JAVA基础编程50题(10-12题)详解的相关文章

JAVA基础编程50题(4-6题)详解

一.描述 1.将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,输出之前的所有因子. (2)如果n!=k,但n能被k整除,则应打印出k的值,并用n除以k的商作为新的正整数n,重复执行第一步. (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步. 2.利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之

JAVA基础编程50题(1-3题)详解

一.题目描述 1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... ,该题其实就是斐波那契数列的一种. 2.判断m-n之间有多少个素数,并输出所有素数. 程序分析:判断素数的方法:用一个数n分别去除2到sqrt(n),这里是Math自带的函数sqrt()求该数的平方根,如果能被整除,则表明此数不是素数,反之是素数. 3.打印出所有的

JAVA基础编程50题(13-15题)详解

一.描述 1.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方,如果开方后再平方等于原数则符合结果. 2.输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天. 3.输入三个整数x,y,z,请把这三个数由小到大输出. 程序分析:将最小的数放到x上,先

JAVA基础编程50题(22-24题)详解

一.描述 题目1:统计输入的一段字符串,分别统计这个字符串中大小写字母的个数,以及数字出现的次数. 第一种方法使用Character封装类的方法:isLowerCase(),isUpperCase(),isDigit()判断是否是该类字符, 第二种方法是直接使用char字符范围比较来统计. 题目2:用户输入一串待统计的字符串,然后输入用户想要统计的某个单词或者字符的次数. 比如我输入如下字符串:fdhiaojavajidaoijdjava 我要统计其中的java字符串的个数. 解题思路:传入待统

JAVA基础编程50题(7-9题)详解

一.描述 1.输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的总个数和每个字符出现的频率. 程序分析:使用String类的matchs()分别统计符合正则表达式的每类字符的总个数,然后分别使用List和Map集合类统计每个字符出现的频率. 2.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制. 3.题目:一个数如果恰好等于它的因子之和,这个数就称为"完数",即除了本身

JAVA基础编程50题(25-27题)详解

一.描述 题目1:判断一个数字是否是2的阶次方数,例如8,16,64,256都是2的阶次方数. 题目解析:如果一个数是2的阶次方数,那么这个数字的二进制数的首位为1,后面跟着若干个0,例如8用二进制表示为1000,64为1000000, 如果让这个数减1,然后和这个数做按位&运算即得0,即(number-1)&number==0,8&7=1000&0111=0000. 题目2:列出一个数组中所有元素的组合,比如1.2.3列出来为1.12.123.13.132.2.21.21

PTA 基础编程题目集 -函数12题

 4-1 简单输出整数   (10分) void PrintN(int N) { int i,sum=0; for(i=1; i<=N; i++) printf("%d\n",i); } 4-2 多项式求值   (15分) double f( int n, double a[], double x ) { int i; double sum; for(i=0; i<=n; i++) { if(i==0) sum+=a[i]; else if(i==1) sum+=a[i

java基础编程题

java基础编程题 1.打印出如下图案 1 public class Prog19{ 2 public static void main(String[] args){ 3 int n = 5; 4 printStar(n); 5 } 6 7 //打印星星 8 private static void printStar(int n){ 9 //打印上半部分 10 for(int i=0;i<n;i++){ 11 for(int j=0;j<2*n;j++){ 12 if(j<n-i) 1

6、50道JAVA基础编程练习题跟答案

1 50道JAVA基础编程练习题 2 [程序1] 3 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 4 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 5 public class Prog1{ 6 public static void main(String[] args){ 7 int n = 10; 8 System.out.println("第"+n+