import java.awt.*;
import java.util.*;
import java.applet.Applet;public class Applet18 extends Applet {
       int i, j, k, l;
       Vector v = new Vector();       public void init(){ 
             for(i=1;i<=50;i++){
                  for(j=1;j<=50;j++){
                       for(k=1;k<=50;k++){
                               int [] myint = {i, j, k};
                                 v.add(myint);
                                 
                            
                       }
                  }
             }
        }
                
       public void paint(Graphics g){ 
             for(l=0;l<v.size();l++){
                         int [] nint =(int []) v.elementAt(l);
                         if((nint[0]*nint[0]+nint[1]*nint[1])!=nint[2]*nint[2]){
                                 v.remove(l);
                             while(l>=v.size()-1){
                               g.drawString((new Integer(v.size())).toString(), 60, 60);
                               int [] mi = (int [])v.elementAt(2);
                               g.drawString((new Integer(mi[0])).toString(), 60, 80);
                               g.drawString((new Integer(mi[1])).toString(), 60, 100);
                               g.drawString((new Integer(mi[2])).toString(), 60, 120);                             }    
                         }
                }
             
        } 
    }     
求50以下的整数中能组成直角三角行的任意组合;   

解决方案 »

  1.   

    import java.awt.*;
    import java.util.*;
    import java.applet.Applet;public class t extends Applet {
    int i, j, k, l; Vector v = new Vector(); public void init() {
    for (i = 1; i <= 50; i++) {
    for (j = i; j <= 50; j++) {
    for (k = j; k <= 50; k++) {
    int[] myint = { i, j, k };
    v.add(myint); }
    }
    }
    } public void paint(Graphics g) {
    int count = 0;
    for (l = 0; l < v.size(); l++) {
    int[] nint = (int[]) v.elementAt(l);
    // if ((nint[0] * nint[0] + nint[1] * nint[1]) != nint[2] * nint[2])
    // {
    // v.remove(l);
    // while (l >= v.size() - 1) {
    // g.drawString((new Integer(v.size())).toString(), 60, 60);
    // int[] mi = (int[]) v.elementAt(2);
    // g.drawString((new Integer(mi[0])).toString(), 60, 80);
    // g.drawString((new Integer(mi[1])).toString(), 60, 100);
    // g.drawString((new Integer(mi[2])).toString(), 60, 120);
    //
    // }
    // }
    if ((nint[0] * nint[0] + nint[1] * nint[1]) == nint[2] * nint[2]) {
    count++;
    }
    }
    g.drawString(String.valueOf(count), 60, 60);
    }
    }
      

  2.   

    用上面我修改的代码算只有20个。
    当然不一定对。我觉得楼主的错误是:
    init方法逻辑不对。
    例:i=3,j=4,k=5,和i=5,j=4,k=3,应该算一个三角形,但按照楼主把这个算两个了。
    也就是说必须设定i<=j<=k的一个顺序后,才能保证得到的结果里没有类似上述例子的重复。另外,我觉得paint方法直接取个count比v.remove(l);看着舒服
      

  3.   

    不做不知道啊,原来有这么多可配的整数
    import java.awt.*;
    import java.util.*;
    import java.applet.Applet;public class Applet18 extends Applet {
    int i, j, k, l;
    Vector v = new Vector(); public void init() {
    for (i = 1; i <= 50; i++) {
    for (j = 1; j <= 50; j++) {
    for (k = 1; k <= 50; k++) {
    int[] myint = { i, j, k };
    if (i*i + j*j == k*k) v.add(myint); }
    }
    }
    } public void paint(Graphics g) {
    g.drawString((new Integer(v.size())).toString(), 60, 60);
    for (l = 0; l < v.size(); l++) {
    int[] mi = (int[]) v.elementAt(l);
    g.drawString((new Integer(mi[0])).toString(), 60+20*0, 80+l*20);
    g.drawString((new Integer(mi[1])).toString(), 60+20*1, 80+l*20);
    g.drawString((new Integer(mi[2])).toString(), 60+20*2, 80+l*20); }
    }
    }