谈恋爱五百万 2021-11-26 14:57 采纳率: 50%
浏览 166
已结题

下面是打印输出所有和为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

  • 写回答

1条回答 默认 最新

  • 钰娘娘 2021-11-27 03:05
    关注
    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;
        }
    }
    
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 12月5日
  • 已采纳回答 11月28日
  • 创建了问题 11月26日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部