下面是打印输出所有和为1000的连续整数(如198、199、200、201、202)的程序,请在方框中填入正确的内容,其他语句请勿修改。

public class Java2 {
public static void main(String[] args) {
int i; //循环计数用, 是连续整数序列的起始点
int j;//记录连续整数序列的终点
int k;//循环计数用
int sum;//计算连续整数的和
for( ? ){
j=i;
sum=i ;

? //sum为若干个连续整数之和
if (sum==1000) { //如果恰好等 于1000,就输出i-j的整数序列
? System. out. print (k+" , ");
System. out. println() ;
}// end if
}//loop i

public class Java2 {
    public static void main(String[] args) {
        int i; //循环计数用, 是连续整数序列的起始点
        int j;//记录连续整数序列的终点
        int k;//循环计数用
        int sum;//计算连续整数的和
        for(i=0;i<=1000;i++){
            j=i;
            sum=i ;
            while(sum+j+1<=1000)
                sum+=++j; //sum为若干个连续整数之和
            if (sum==1000) { //如果恰好等 于1000,就输出i-j的整数序列
                for(k=i;k<=j;k++) System. out. print (k+" , ");
                System. out. println() ;
            }// end if
        }
    }
}

假设不是填空,自己写建议滑动窗口:

public class Java2 {
    public static void main(String[] args) {
        int j = 0;//左边界
        int sum = 0;
        for(int i = 0;i<=1000;i++){//右边界
            sum+=i;
            //一定要当前的,超出的部分左侧扣减
            while (sum>1000)
                sum-=j++;
            if(sum==1000){
                for(int k = j; k<= i; k++){
                    System.out.print(k);//k和,分开更好,合起来创建了StringBuilder,创建了额外对象
                    System.out.print(",");
                }
                System.out.println();
            }
        }

    }
}

公式二分法(这个写着玩的,不建议):

public class Java2 {
    public static void main(String[] args) {
        Java2 java2 = new Java2();
        for(int i = 0;i<=1000;i++){//右边界
            int j = java2.binaryFind(i,1000);
            if(i<=j){
                for(int k = i; k <= j; k++){
                    System.out.print(k);
                    System.out.print(",");
                }
                System.out.println();
            }

        }

    }

    private int binaryFind(int start,int aid){
        int left =start-1;
        int right = aid;
        while(left<right){
            int mid = (right-left+1)/2+left;
            int sum = (start+mid)*(mid-start+1);
            if(sum>aid*2){
                right = mid-1;
            }else if(sum == aid*2){
                return mid;
            }else{
                left = mid;
            }
        }
        return -1;
    }
}