黑马程序员技术交流社区

标题: 算法题 [打印本页]

作者: 大天    时间: 2016-8-5 21:33
标题: 算法题
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
作者: Frankle    时间: 2016-8-6 15:22
x+100 = m^2 ; m^2 +168 = n^2
是这个意思吗?

作者: life写实    时间: 2016-8-6 22:27
哪位大神把这个题用Java写出来。。。
作者: leomywork    时间: 2016-8-7 00:18
本帖最后由 leomywork 于 2016-8-7 00:35 编辑

这道题关键是数学推理分析,分析思路和程序如下:
[] 纯文本查看 复制代码

/*
* 1: x + 100 = m ^ 2; ===>       m > 10
* 2: m ^ 2 + 168 = n ^ 2; ===>   n > m > 10(由1、2得)
* 3: 168 = 2 * 2 * 2 * 3 * 7;
* 4: (n - m)(n + m) = 168;  ===> n + m > 20(由1、4得)
* 5: 168 ===>  2 * 84、3 * 56、4 * 42 、6 * 28、7 * 24、8 * 21(由4、5得)
* 如 n - m = 2; n + m = 84; 两式联立得2n = 84 + 2; m = n - 2 求得 m ,n 并满足n ^ 2 - m ^ 2 = 168
*/

package com.leo.exercise;

public class Test{
        public static void main(String[] args) {
                int[] array = {2, 84, 3, 56, 4, 42, 6, 28, 7, 24, 8, 21};
                int n = 0, m = 0;
                for(int i = 0; i < array.length; i += 2){
                        n = (array + array[i + 1]) / 2;
                        m = array[i + 1] - n;
                        if(n * n - m * m == 168){
                                System.out.println(m * m - 100);
                        }
                }
        }
}

捕获.JPG (4.77 KB, 下载次数: 11)

捕获.JPG

作者: Maroon    时间: 2016-8-7 00:57
public static void main(String[] args) {
                for(int i = 0;i <= 100000;i++){
                        double a = (double) i;
                        if(Math.sqrt(a + 100) % 1 == 0 && Math.sqrt(a + 268) % 1 ==0){
                                System.out.println(i);
                        }
                }
        }

268 * 268 =71824
再往上加268效果就没大了,所以我取了个循环到100000
利用了Math类中的求平方根的算法,返回值是double类型的,模于1如果为0,则说明是个完全平方数




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2