A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Bellriver 于 2016-4-29 00:18 编辑

给出一个整数,判断是否有连续的自然数相加等于这个整数,如果有,请列出这一串自然并计算出一共有多少个?
例如:
3=1+2    (1个)
5=2+3   (1个)
6=1+2+3   (1个)
7=3+4     (1个)
9=4+5 / 2+3+4   ( 2个)
10=1+2+3+4    (1个)
11=5+6     (1个)
12=3+4+5    ( 1个)
......

7 个回复

倒序浏览
一个数M若可以写成以a开头的连续n个自然数之和,则M=a+(a+1)+(a+2)+…+(a+n-1)=n*a+n*(n-1)/2,要求a!=0,否则就是以a+1开头的连续n-1个整数了,也就是要求(M-n*(n-1)/2)%n==0,这样就很容易判断一个数可不可以写成连续n个自然数的形式了,遍历n=2…sqrt(M)*2,还可以输出所有解。

复制代码
void divide(int num)  
{  
    int i,j,a;  
    for(i=2; i<=sqrt((float)num)*2; ++i)  
    {  
        if((num-i*(i-1)/2)%i==0)  
        {  
            a=(num-i*(i-1)/2)/i;  
            if(a>0)  
            {  
                for(j=0; j<i; ++j)  
                    cout<<a+j<<" ";  
            }  
            cout<<endl;  
        }  
    }   
}  
回复 使用道具 举报
public class Testt {
        private static void f(int i,int c){
                if(c>=i)
                        return;
                int sum = 0;
                for(int k=c;k<i;k++)
                {
                        sum+=k;
                        if(sum==i)
                        {
                                System.out.println(i);
                                break;
                        }
               
                }
        }
        public static void main(String[] args) {
       
                for(int i = 1;i<100;i++)
                {
                        for(int j=1;j<i;j++)
                        {
                                //System.out.println("TEST:"+i);
                                f(i,j);
                        }
                }
               
        }
}
回复 使用道具 举报
可以练练手,开发下大脑。
回复 使用道具 举报
soga,待我先吃个核桃
回复 使用道具 举报
好东西,可以做一下
回复 使用道具 举报
兄弟,我过来看看你啦.顶你哦
回复 使用道具 举报
脑细胞死了太多,也想不开
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马