连续正整数

来源:互联网 发布:登山鞋 徒步鞋 知乎 编辑:程序博客网 时间:2024/04/30 14:47

1820: 连续正整数

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 12  Solved: 7
[Submit][Status][Web Board]

Description

【问题描述】 有些正整数可以被表示为n(n>=2)个连续正整数之和,例如: 15=1+2+3+4+5 15=4+5+6 15=7+8 编写程序,从标准输入上读入一个不大于5000的正整数,找出和为该数的所有连续正整数序列,将相应的等式输出到标准输出上,每行一个等式,且不得重复输出。等式的左侧为输入的整数,右侧表达式中的数字以从小到大的顺序排列。如果结果有多个等式,按等式右侧最小正整数的升序输出。等式内各个字符相连,每个等式以换行符结束。如果没有符合要求的等式,输出“NONE”。

Input

【输入样例1】 15 
【输入样例2】 16

Output

【输出样例1】
15=1+2+3+4+5
15=4+5+6
15=7+8
【输出样例2】
NONE

HINT

不要超时!支持java /C /C++

Source

一个大三的


想到上面写的这道题目!数据太大就超时了!原来这一题我


用vector存的,一开始数据小过了,老师一改数据就大了!


就不好使了,发一下原来的代码:


#include<cstdio>#include<iostream>#include<vector>using namespace std;int main(){    int n,i,j,sum,l,k,f;    while(cin>>n)    {        f=0;        for(i=1;i<=n/2;i++)        {            sum=i;            vector<int>a;            a.push_back(i);            for(j=i+1;j<=n;j++)            {                sum+=j;                a.push_back(j);                if(sum>=n)                {                    l=a.size();                    if(sum==n)                    {                        f=1;                        cout<<n<<"=";                        for(k=0;k<l-1;k++)                        {                            cout<<a[k]<<"+";                        }                        cout<<a[l-1]<<endl;                    }                    break;                }            }        }        if(f==0)        {            cout<<"NONE"<<endl;        }    }}

发一下现在的代码


#include<cstdio>#include<cmath>#include<iostream>using namespace std;int main(){    int n,m,sum,i,j,f;    while(cin>>n)    {       m=n;       f=0;       for(i=(int)sqrt(2*m);i>=2;i--)        {            sum=m-i*(i-1)/2;            if(sum%i==0)            {                f=1;                cout<<n<<"=";                for(j=sum/i;j<sum/i+i-1;j++)                {                    cout<<j<<"+";                }                cout<<sum/i+i-1<<endl;            }        }        if(f==0)        {            cout<<"NONE"<<endl;        }    }}


0 0