「Java学习打卡」 9、计算应用练习

题目一:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21…,即下个月是上两个月之和(从第三个月开始)。

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        int fir=1,sec=1;//初始月份
        Scanner input = new Scanner(System.in);
        System.out.print("请输入总计算月份:");
        float month = Integer.parseInt(input.next());
        for(int i = 1,count=1; i <= Math.round(month / 2); i++)
        {

            System.out.print("第" +count + "月:");
            System.out.println(fir);
            count++;
            if(month%2!=0 && i == Math.round(month / 2)) {
                break;
            }
            System.out.print("第" +count + "月:");
            System.out.println(sec);
            count++;
            fir=fir+sec;
            sec=fir+sec;
        }
        return;
    }
}

题目二:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:
本题目实际可以转换成为数学逻辑问题,假设该数为 x。
1、则:x + 100 = n2, x + 100 + 168 = m2
2、计算等式:m2 - n2 = (m + n)(m - n) = 168
3、设: (m + n) = I,(m - n) = j,得 i * j =168,所以 i 和 j 至少一个是偶数
4、得: m = (i + j) / 2, n = (i - j) / 2,得 i 与 j 同奇同偶。
5、所以:i 与 j 均是大于等于 2 的偶数。
6、由于:i * j = 168, j>=2,则 2 <= i < =168 / 2 。
7、接下来所有符合条件的数字循环计算即可。

public class Test {
    public static void main(String[] args) {
        for (int i = 2; i <= 168 / 2 ; i++)
        {
            if (168 % i == 0)
            {
                int j = 168 / i;
                if ( i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0)
                {
                    int m = (i + j) / 2;
                    int n = (i - j) / 2;
                    int x = n * n - 100;
                    System.out.print(x+" + 100 = "+n+" * "+n+"\t\t");
                    System.out.println(x+" + 268 = "+m+" * "+m);
                }
            }
        }
        return;
    }
}
发布了30 篇原创文章 · 获赞 0 · 访问量 464

猜你喜欢

转载自blog.csdn.net/qq_26959737/article/details/104655707