简单的Java循环控制问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 10:07:17
题目:求各边长不大与500的直角三角形个数

问题程序如下:
public class Shape
{
public static void main( String args[] )
{
int side1,side2,side3;
int sum=1,count=1;

for ( side1 = 1; side1 <= 500; side1++ )
{
for ( side2 = 1; side2 <= 500; side2++ )
{

for ( side3 = 1; side1+side2>side3 && side1+side3>side2

&& side2+side3>side1 && side3 <= 500; side3++ )
{
if ( side1*side1 + side2*side2 ==s ide3*side3 )
sum++;

}
}
}
System.out.println( "三角形: " + sum );

}
}

问题出在最内层for循环,最后结果为1个,把循环条件改为只有side3 <= 500时结果为773个
三角形两边之和大于第三边,不对??
或者是有任何低级失误,请指出来,谢谢
side3实质上只是一个500以内的数值,代表斜边可能的长度,这个应该没问题吧?
sum是多了1
顺便问下哥们你的什么机器,486啊,这种计算量要两分钟???
zhangxin-qqq的修改是有效的,很好,可是为什么把判断句放在for中就不行了?照理说同样的判断句放这两个位置应该是一样效果的吧

我写了一下

public static void main(String[] args) throws IOException {
// FileOutputStream out = new FileOutputStream("d:tt.txt");
int side1;
int side2;
int side3;
int max = 0, min = 0;
for (side1 = 500; side1 > 0; side1--) {

for (side2 = 500; side2 > side1; side2--) {
min = side1 > side2 ? (side1) : (side2);
max = (side1 + side2) > 500 ? 500 : (side1 + side2);
for (side3 = min + 1; side3 > min && side3 < max; side3++) {
if (side1 * side1 + side2 * side2 == side3 * side3) {

System.out.println(side1 + "~~~~~~~" + side2
+ "~~~~~~~~" + side3);

}

}

}

}

}

你们没有考虑 435 和345 是同一种情况,所以多算了

你可以把side1+side2>side3 && side1+side3>side2 && side2+side3>side1 这个条件去掉,因为side1*side1 + side2*side2 ==s ide3*side3 已经满足直角三角形的条件,