[Java 编程基本功] (五) 小球落体, 发奖金, 1,2,3,4 可以组成多少个数

第十三题

一球从 100 米高度自由落下, 每次落地后反跳回原高度的一半; 再落下, 求它在第 10 次落地时, 共经过多少米? 第 10 次反弹多高?

思路:

小球落到地上再反弹到原高度的一半视为一次下落的过程, 第十次落地时, 完成了 9 次落地再反弹的过程.

代码:publicclassBall{
publicstaticvoidmain(String[]args){
//h 记录球的初始高度
doubleh=100;
//up 记录小球反弹的距离doubleup=0;
//down 记录小球下落的距离doubledown=0;
for(inti=1;i<10;i++){
down=down+h;
up=up+h/2;
h=h/2;
}
System.out.println("10 次落地共经过多少米"+(down+up+h));
System.out.println("第 10 次反弹高度"+h/2);
}
}

这样子, 代码是不是就比较容易理解了呢?

咱们的 Java 毕竟是一门面相对象的语言, 所以咱们来玩点花样, 用面相对象的方式来解决这个问题, 嘿嘿我真是机智

面相对象的方式:

一球从 100 米高度自由落下, 每次落地后反跳回原高度的一半; 再落下, 求它在第 10 次落地时, 共经过多少米? 第 10 次反弹多高?

先来写一个小球的实体类:

代码:publicclassBall{
doubleheight;
doublesum;
publicBall(doubleheight){
this.height=height;
sum=0.0;
}
publicvoidfall(){
sum=sum+height;
}
publicvoidbound(){
height=height/2;
sum=sum+height;
}
@Override
publicStringtoString(){
return"Ball [高度"+height+", 经过的路程"+sum+"]";
}
}
现在我们另外在写一个代码来调用这个代码:publicclassBallTest{
publicstaticvoidmain(String[]args){
//new 一个 1 小球对象
Ballball=newBall(100);
// 小球完成 9 次落地反弹
for(inti=1;i<10;i++){
ball.fall();
ball.bound();
}
// 第十次落地时的距离ball.fall();
System.out.println(ball);
// 反弹的高度
ball.bound();
System.out.println("小球的高度为:"+ball.height);
}
}

效果图:

java模拟小球下落 java小球自由落体代码_i++

image

当然重点是第一种方式, 第二种面相对象的方式, 现在看不懂也没关系, 我们一点一点来. 自己可以去尝试一下, 但是千万不要知识中毒, 我们就是锻炼一下这种面相对象的思想而已~

第十四题

有 1,2,3,4 四个数字, 能组成多少个互不相同且无重复数字的三位数? 都是多少?

思路:

我是没有别的想法, 就用穷举法吧 (小伙伴们有好方法欢迎留言谈论哈)

代码:publicclassTest2{
publicstaticvoidmain(String[]args){
intcount=0;
for(intx=1;x<5;x++){
for(inty=1;y<5;y++){
for(intz=1;z<5;z++){
if(x!=y&&x!=z&&y!=z){
count++;
System.out.println(x*100+y*10+z);
}
}
}
}
System.out.println("共有"+count+"个三位数");
}
}

第十五题

企业发放的奖金根据利润提成. 利润低于或等于 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% 提成, 从键盘输入当月利润, 求应发放奖金总数?

代码:importjava.util.Scanner;
publicclassBonus{
publicstaticvoidmain(String[]args){
doublex=0,y=0;
System.out.println("请输入当前利润 (单位: 万)");
Scannerin=newScanner(System.in);
while(in.hasNext()){
x=in.nextDouble();
if(x>=0&&x<=10){
y=x*0.1;
}elseif(x>10&&x<=20){
y=10*0.1+(x-10)*0.075;
}elseif(x>20&&x<=40){
y=10*0.1+10*0.075+(x-20)*0.05;
}elseif(x>40&&x<=60){
y=10*0.1+10*0.075+20*0.05+(x-40)*0.03;
}elseif(x>60&&x<=100){
y=10*0.1+10*0.075+20*0.05+20*0.03+(x-60)*0.015;
}elseif(x>100){
y=10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(x-100)*0.01;
}
System.out.println("应发放的奖金数"+y+"万");
}
}
}