JAVA之经典算法二

3 篇文章 0 订阅

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

public class Demo6 {
    public static void main(String args[]){
        double s = 0;
        double h = 100;
        for (int i = 1; i <= 10; i++) {
            s += h;
            h = h/2;
            s += h;
        }
        System.out.println("经过路程:"+s);
        System.out.println("反弹高度:"+h);
    }
}

调试结果:
经过路程:299.70703125
反弹高度:0.09765625

程序2:求s = a + aa + aaa + aaaa + aa…a的值,其中a是一个数字。
例如2 + 22 + 222 + 2222 + 22222(此时共有5个数相加),几个数相加有键盘控制。
1.程序分析:关键是计算出每一项的值。

public class Demo7 {
    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        System.out.println("请输入a的值");
        int a = in.nextInt();
        System.out.println("请输入n个数");
        int n = in.nextInt();
        int s = 0,t=0;
        for (int i = 1; i <= n; i++) {
            t += a;
            a = a*10;
            s += t;
        }
        System.out.println(s);
    }
}

调试结果:
请输入a的值
2
请输入n个数
3
246

程序3:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用for循环语句,if条件语句。

public class Demo8 {
    public static void main(String args[]) {
        System.out.println("请输入一个字符串;");
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        char[] ch = str.toCharArray();
        count use = new count();
        use.count(ch);
    }

    static class count {
        int digital, character, blank, other;

        public void count(char[] arr) {
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] >= '0' && arr[i] <= '9') {
                    digital++;
                } else if ((arr[i] >= 'a' && arr[i] <= 'z') || (arr[i] >= 'A' && arr[i] <= 'Z')) {
                    character++;
                } else if (arr[i] == ' ') {
                    blank++;
                } else {
                    other++;
                }
            }
            System.out.println("数字个数:" + digital);
            System.out.println("英文字母个数:" + character);
            System.out.println("空格个数:" + blank);
            System.out.println("其他字符个数:" + other);
        }
    }

}

调试结果:
请输入一个字符串;
fhaln k#L@24% *(JI-)
数字个数:2
英文字母个数:9
空格个数:2
其他字符个数:7

程序4:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,
又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1.程序分析:采取逆向思维的方法,从后往前推断。

public class Demo9 {
    public static void main(String args[]){
        int sum = 1;
        for (int i = 0; i < 9; i++) {
            sum = (sum + 1) * 2;
        }
        System.out.println("第一天共摘"+sum);
    }
}

调试结果:
第一天共摘1534

程序5:打印出如下图案(菱形)
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。

  菱形:
   *
  ***
 *****
*******
 *****
  ***
   *

public class Demo10 {
    public static void main(String args[]){
        int i = 0;
        int j = 0;
        for (i = 1; i <= 4; i++) {
            for (int k = 1; k <= 4 - i; k++)
                System.out.print( " " );
            for (j = 1; j <= 2 * i - 1; j++)
                System.out.print("*");
            System.out.println();
        }
        for (i = 3; i >= 1; i--) {
            for (int k = 1; k <= 4 - i; k++)
                System.out.print( " " );
            for (j = 1; j <= 2 * i - 1; j++)
                System.out.print("*");
            System.out.println();
        }

    }
}

调试结果:
   *
  ***
 *****
*******
 *****
  ***
   *

三角形:

        *
        ***
        ******
        ********
        ******
        ***
        *
public class Demo10 {
    public static void main(String[] args) {
        int i=0;
        int j=0;
        for ( i = 1; i <= 4; i++) {
            for ( j = 1; j <= 2 * i - 1; j++)
                System.out.print("*");
            System.out.println();
        }
        for ( i = 3; i >= 1; i--) {
            for ( j = 1; j <= 2 * i - 1; j++)
                System.out.print("*");
            System.out.println();
        }
    }
}

调试结果:
   *
        ***
        ******
        ********
        ******
        ***
        *
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值