日期:2014-05-20  浏览次数:20684 次

这个小java程序哪里出错了???
用java语言编写求1+2+3+.....+n<8888的最大正整数n,我用下面的方法求出的n=134,而我们同学求出的n=132,不知到底哪个正确,求教。

public class NN
{
public static void main(String arsg[])
{
int i=1,sum=0,t=1,n=0;
boolean a=true;
for(i=1;a;i++)
{
sum=sum+t;
t=i;
n++;
if(sum>=8888)
break;
}
System.out.println("n="+n);
}
}

------解决方案--------------------
C/C++ code

public class NN
{
    public static void main(String arsg[]){
        int i=1,sum=0;
        //boolean a=true;
        for(i=1; ; i++){
            sum += i;            
            if(sum < 8888 && sum + i + 1 > 8888)
                break;
            }
        System.out.println(i);
        }
}

------解决方案--------------------
探讨
C/C++ code


public class NN
{
public static void main(String arsg[]){
int i=1,sum=0;
//boolean a=true;
for(i=1; ; i++){
sum += i;
……

------解决方案--------------------
Java code

//(1+n)*n/2<=8888
//n^2 + n <=17776
//132是正确的
int sum = 8888*2;
        for (int i = 0; i <8888; i++) {
            if (i*(1+i) > sum) {
                System.out.println(i-1);
                System.out.println(8888-((i-1)*i/2));
                break;
            }
        }

------解决方案--------------------
嘿嘿,我的结果和他们都不一样的。我算出来时133哦。不解释看代码。
Java code

public class test {
    public static void main(String arsg[]) {
        int n=0,sum=0;
        for (int i = 0;true; i++) {
            for(int j=0;j<=i;j++){
                sum+=j;
            }
            if(sum>=8888){
                n=i;
                System.out.println("n=" + n);//结果为133.
                sum=0;
                break;
            }
            sum=0;
        }
        
        //验证!!!
        for(int i=0;i<=n;i++){
            sum+=i;
        }
        System.out.println(sum-n);//输出为8778,意思就是说,如果知道n-1的时候,即n=132的时候,1加到n不>=8888.
    }
}

------解决方案--------------------
Java code

int sum = 0;
int n = 0;
while ((sum += ++n) < (8888 - n));
System.out.println("n = " + n);
System.out.println("sum = " + sum);

------解决方案--------------------
探讨
嘿嘿,我的结果和他们都不一样的。我算出来时133哦。不解释看代码。

Java code

public class test {
public static void main(String arsg[]) {
int n=0,sum=0;
for (int i = 0;true; i++) {
for(int j=……

------解决方案--------------------
楼主的代码稍微变通下就是这样
Java code

public class User {

    public static void main(String arsg[]) {
        int i = 1, sum = 0, n = 0;// 把你的t去得了,t是多余的
        boolean a = true;
        for (i = 1; a; i++) {
            sum = sum + i;
            if (sum >= 8888)// 注意if的位置,if一定要在n++前面
                break;
            n++;
        }
        System.out.println("n=" + n);// 132
    }
}