基础编程50题

【题目13】解三元2次方程组

2017-03-26  本文已影响28人  Xplorist

【程序13】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

package com.share.test11_20;

/**
 * 【程序13题目:<br>
 * 完全平方即用一个整数乘以自己例如1*1,2*2,3*3等,依此类推。<br>
 * 若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。<br>
 * 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?    
 * 
 * @author brx
 */
public class Test13 {
    public static void main(String[] args) {
        test1();
    }

    /**
     * 思路1:<br>
     * 用数学思维来分解问题为平方差公式,再用计算机的穷举循环判断<br>
     * 这种方法的优点是能够将所有的整数都找出来,而不用担心穷举的范围不够<br>
     * x+100=y*y<br>
     * x+100+168=z*z<br>
     * y*y+168=z*z<br>
     * (z+y)(z-y)=168<br>
     * 找出z和y就能够求出x,将168分解出两个因数,<br>
     * 然后判断这连个因数之和除以2因数之差除以2分别是不是整数<br>
     * 【注意:】<br>
     * 将循环控制次数中的168该为13可以去掉重复出现的情况,因为两数相乘的中间就是平方, <br>
     * 找出离168最近但又比168的平方数169的平方根13
     */
    public static void test() {
        for (int i = 1; i <= 168; i++) {
            int m = 0, n = 0;
            if (168 % i == 0) {
                m = i;
                n = 168 / i;
                if ((m + n) % 2 == 0 && (m - n) % 2 == 0) {
                    int z = (m + n) / 2;
                    int y = (m - n) / 2;
                    int x = z * z - 268;
                    System.out.print("该数为:【" + x + "】   ");
                    System.out.print(x + "+100=" + y + "*" + y + "  ");
                    System.out.println(x + "+268=" + z + "*" + z + "  ");
                }
            }
        }
    }
    /**
     * 思路2:<br>
     * 直接暴力的使用判断将穷举循环判断,只要控制穷举地范围够大就能包含所有结果<br>
     * 判断是整数的方法很妙
     */
    public static void test1(){
        for(long i=-100000;i<100000;i++){
            if(Math.sqrt((i+100))%1==0&&Math.sqrt((i+100+168))%1==0){
                System.out.println(i);
            }
        }
    }
    
    
}

上一篇下一篇

猜你喜欢

热点阅读