下面的这2个题目难了小弟2年!从2010年12月到2011年2月都没办法解决,跪求实现代码!!
题目:
      李先生岁数的平方与他的夫人的岁数之和是1053,而他的夫人的岁数的平方与他的岁数之和是873,请编写程序计算李先生及其夫人的岁数各是多少。       有两个正整数a和b,已知a*b=2048,求a、b各为何值时,a+b的值最小。

解决方案 »

  1.   

    不考虑效率应该很好写吧 
    public class Main {    public static void main(String[] args) {
            for(int i=1;i<150;i++)
                for(int j=1;j<150;j++)
                    if(i*i+j==1053||i+j*j==873)
                        System.out.println("李先生 "+i+"  夫人"+j);
        }
    }run:
    李先生 31    夫人92
    李先生 32    夫人29
    李先生 89    夫人28
    李先生 144    夫人27 
      

  2.   

    第二题public class Test2 { private static int a;
    private static int b;
    private static int MinSum = 2049; private static int count() { for (int a = 1; a < 2048; a++) {
    for (int b = 1; b < 2048; b++) {
    if(a*b == 2048){
    System.out.println("a: "+a+"  ,b: "+b);
    if(MinSum>a+b)
    MinSum = a+b;
    }
    }
    }
    System.out.println("a+b的最小值为:"+MinSum);
    return 0;
    } public static void main(String[] args) {
    count();
    }}
      

  3.   

    为什么我学的for循环都是这样的:for(){}?
    为什么是两个for循环呢,楼上的能不能给我详细的说下,拜谢.....
      

  4.   

    额 for和if默认可以带一句不用{}貌似这样不好不要学我.......
      

  5.   

    public class Test {
        public static void main(String[] args) {
            // 因为至今还记录没有活到200岁以上的人,所以最大值使用了200,否则就要变成妖怪了
            for (int i = 1; i < 200; ++i) {
                // 李先生的岁数为i
                for (int j = 1; j < 200; ++j) {
                    // 李夫人岁数为j
                    if (i * i + j == 1053 && j * j + i == 873) {
                        System.out.printf("李先生%d岁,李夫人%d岁", i, j);
                    }
                }
            }
        }
    }
    李先生32岁,李夫人29岁
      

  6.   

    public class Test {
        public static void main(String[] args) {
            // 从条件可以判断出最大的年龄
            final int maxAge = (int) Math.max(Math.sqrt(1053), Math.sqrt(873));        // 李先生的岁数为i,李夫人岁数为j
            for (int i = 1; i <= maxAge; ++i) {
                for (int j = 1; j < maxAge; ++j) {
                    if (i * i + j == 1053 && j * j + i == 873) {
                        System.out.printf("李先生%d岁,李夫人%d岁", i, j);
                    }
                }
            }
        }
    }
      

  7.   

    热泪盈眶...这么多热心老鸟帮助,小弟一一拜谢!!看了你们的给了我很大的启发,我自己的代码原来是少了个for循环,我说又不报错,又没出结果,郁闷的过了个春节...这下心里舒服了~~恩,谢谢zdfddqr了,我还说我学的怎么就不同。祝各位热心的大大,鸿兔大展.....
      

  8.   

    老白的这个调用方法复杂了点,而且private什么意思我看不懂,还没学到那个地方来。
      

  9.   

    我是菜鸟,也来练下手。
    public class T {
    private static int li;
    private static int wife;
    private static int a;
    private static int b;

    public static void main(String[] args) {
    question1(1053,873); 
    question2(2048);
    }

    private static void question1(int i, int j) {
    boolean y = false; //判断是否有解
    //按正常点的,从1岁到200都试过,先遍历li的值
    for(li=1; li<=200; li++) {
    //li确定后,从一个条件就可以求出wife
    wife = i - li*li;
    //判断是否两个条件都符合,找到就输出
    if((li*li+wife == i) && (wife*wife+li == j)) {
    System.out.println("Mr Li's age is " + li + ",His wife's age is " + wife);
    y = true;
    }
    }
    if(y == false) { 
    System.out.println("无解.");
    }
    }

    private static void question2(int i) {
    int sum =0;      //sum不好赋值,先赋个0,在下面通过判断标志,把第一对a,b赋给它
    int a1=0, b1=0;  //存放最小值时的a和b
    boolean first = false; 
    //一个数i除了它本身最大的因数肯定不大于i/2,而a=1包括了数i乘以本身的情况
    for(a=1; a<=i/2; a++) {
    if(i%a == 0) { //判断能否被整除
    b = i/a;   
    }
    if(first == false) { 
    sum = a+b; 
    first = true;
    } else {   //此时sum已经不再是0了.
    if(a+b < sum) {  //判断比原来的小就替换掉
    sum = a+b; 
    a1 = a; b1 = b;
    }
    }
    }
    System.out.println("当a和b为:" + a1 + "," + b1 +"时,有最小结果为:" + sum);
    }
    }