50道java基础编程(6~10)

来源:互联网 发布:安卓c语言编程工具 编辑:程序博客网 时间:2024/06/10 15:18

【程序6】

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

程序分析:利用辗除法。

  

暴力求解发:

public class IntMaxGyMinGb {

 

    /**

     * @param args

     * 最大公约数:两个数的最小约数之积

     * 最小公倍数:两个数的最小约数与最小余数之积a

     */

    //最大公约数

    public static int f1(int num1,int num2)

    {

        //假设最大公约数是i

        int i;

        i = num1>num2?num2:num1;

        for(; i>=1;i--){

            if(num1 % i == 0&& num2 % i == 0){

                break;

            }

        }

        return i;

    }

    //最小公倍数

    public static int f2(int num1,int num2)

    {

        //假设最小公倍数是i

        int i;

        for(i =num1>num2?num1:num2; i<= num1*num2; i++)

        {

        if(i % num2 == 0&& i % num1 == 0){

            break;

        }

        }

        return i;  

    }

    public static void main(String[] args) {

        int num1 = 12;

        int num2 = 18;

        //最大公约数

        System.out.println(num1+""+num2+"的最大公约数是:"+f1(12,18));

        //最小公倍数胡

        System.out.println(num1+""+num2+"的最小公倍数是:"+f2(12,18));

    }

}


【程序7】

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

程序分析:利用while语句,条件为输入的字符不为'\n'.

 

正在打脑壳中……

 

【程序8】

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

程序分析:关键是计算出每一项的值。

 

import java.util.Scanner;

 

public class Getaaaa {

    /**

     * 样例:求和

     * 2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制

     */

    public static void main(String[] args) {

        Scanner sc = newScanner(System.in);

        //数字

        System.out.println("请输入需要重复相加的数字:");

        int num =sc.nextInt();

        //重复数字

        int num1 = 0;

        System.out.println("请输入需要重复的长度:");

        //数字长度

        int length =sc.nextInt();

        //保存每项重复数字

        int[] sum =new int[length];

        //相加结果

        int result = 0;

        for(int i=0; i<length;i++)

        {

            num1 = num1*10+num;

            sum[i] = num1;

        //  System.out.println(sum[i]);

            result += sum[i];

        }


【程序9】

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

 

public class Wanshu {

    /*

     * 一个数的因子:

     * 比如28

     *28=1*28

     *28=2*14

     *28=4*7

     * 除了本身以外的可以整除的数

     * 所以28的因子有

     * 1 24 7 14

     */

    public static void main(String[] args) {

        int num_length =10000;

        System.out.println(num_length+"内的完数:");

        //其实从1~10000(包含10000

        for(int i=1; i<num_length+1; i++)

        {

            int sum = 0;

            //j<i/2+1 折半算法  j=i+1 的时候就退出循环没必要将i都遍历完

            for(int j=1; j<i/2+1; j++)

            {

                //判断最小约数

                if(i % j == 0){

                    sum += j;

                    if(sum == i){

                System.out.print(sum+"\t");

                    }

                }

           

            }

        }

       

    }

}

 

【程序10】

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

 

public class BallBounce {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

        //开始100m 反弹十次  求经过了多少米?第十次谈了多高?

        //第十次谈了多高 =连续十次beginHeight/2

        //经过了多少米 = beginHeight+每次beginHeight/2

        f(100,10);

    }

    /**

     * 需要注意的是最终球经过的距离要加上最初的高度100m

     * @param ballHeight球的高度

     * @param count 反弹的次数

     */

    public static void f(double ballHeight,int count){

        double ballLong = 0;//球共经过的距离

        for(int i=0; i<count; i++)//循环的次数就是反弹的次数

        {

            ballLong += ballHeight;

            ballHeight /= 2;

           

        }

        System.out.println("最后一次弹起的高度为"+ballHeight+"m\n在此期间求一共经过了"+(ballLong+100)+"m");

    }

}