A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大天 中级黑马   /  2016-8-5 21:33  /  522 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

4 个回复

倒序浏览
x+100 = m^2 ; m^2 +168 = n^2
是这个意思吗?
回复 使用道具 举报
哪位大神把这个题用Java写出来。。。
回复 使用道具 举报
本帖最后由 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[i] + 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, 下载次数: 10)

捕获.JPG
回复 使用道具 举报 1 0
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,则说明是个完全平方数
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马