第十三题
一球从 100 米高度自由落下, 每次落地后反跳回原高度的一半; 再落下, 求它在第 10 次落地时, 共经过多少米? 第 10 次反弹多高?
思路:
小球落到地上再反弹到原高度的一半视为一次下落的过程, 第十次落地时, 完成了 9 次落地再反弹的过程.
代码:
- public class Ball {
- public static void main(String[] args) {
- //h 记录球的初始高度
- double h = 100;
- //up 记录小球反弹的距离
- double up = 0;
- //down 记录小球下落的距离
- double down = 0;
- for(int i=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 次反弹多高?
先来写一个小球的实体类:
代码:
- public class Ball {
- double height;
- double sum;
- public Ball(double height){
- this.height = height;
- sum = 0.0;
- }
- public void fall(){
- sum = sum + height;
- }
- public void bound(){
- height = height/2;
- sum = sum + height;
- }
- @Override
- public String toString() {
- return "Ball [高度" + height + ", 经过的路程" + sum + "]";
- }
- }
现在我们另外在写一个代码来调用这个代码:
- public class BallTest {
- public static void main(String[] args) {
- //new 一个 1 小球对象
- Ball ball = new Ball(100);
- // 小球完成 9 次落地反弹
- for(int i=1;i<10;i++){
- ball.fall();
- ball.bound();
- }
- // 第十次落地时的距离
- ball.fall();
- System.out.println(ball);
- // 反弹的高度
- ball.bound();
- System.out.println("小球的高度为:"+ball.height);
- }
- }
效果图:
image
当然重点是第一种方式, 第二种面相对象的方式, 现在看不懂也没关系, 我们一点一点来. 自己可以去尝试一下, 但是千万不要知识中毒, 我们就是锻炼一下这种面相对象的思想而已~
第十四题
有 1,2,3,4 四个数字, 能组成多少个互不相同且无重复数字的三位数? 都是多少?
思路:
我是没有别的想法, 就用穷举法吧 (小伙伴们有好方法欢迎留言谈论哈)
代码:
- public class Test2 {
- public static void main(String[] args) {
- int count=0;
- for(int x=1;x<5;x++){
- for(int y=1;y<5;y++){
- for(int z=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% 提成, 从键盘输入当月利润, 求应发放奖金总数?
代码:
- import java.util.Scanner;
- public class Bonus {
- public static void main(String[] args) {
- double x=0,y=0;
- System.out.println("请输入当前利润 (单位: 万)");
- Scanner in = new Scanner(System.in);
- while(in.hasNext()){
- x=in.nextDouble();
- if(x>=0&&x<=10){
- y=x*0.1;
- }else if(x>10&&x<=20){
- y=10*0.1+(x-10)*0.075;
- }else if(x>20&&x<=40){
- y=10*0.1+10*0.075+(x-20)*0.05;
- }else if(x>40&&x<=60){
- y=10*0.1+10*0.075+20*0.05+(x-40)*0.03;
- }else if(x>60&&x<=100){
- y=10*0.1+10*0.075+20*0.05+20*0.03+(x-60)*0.015;
- }else if(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+"万");
- }
- }
- }
来源: http://www.jianshu.com/p/2e55851340dc