Description
输入一个数字N,找出i个连续自然数累加为N的所有和式(i>1)。
Input
整数N
Output
N=i个连续自然数累加和式。多解时每个式子占一行,按i从大到小的顺序输出
Sample Input
15
Sample Output
15=1+2+3+4+5 15=4+5+6 15=7+8
KEY:硬搜,慢慢来
Source:
#include < iostream >
using namespace std;
int N;
int t1,t2;
int isAdd( int s)
... {
int i;
int sum=0;
for(i=s;i<=N;i++)
...{
sum+=i;
if(sum==N) return i;
if(sum>N) return 0;
}
return 0;
}
void output( int s, int e)
... {
cout<<N<<"=";
int i;
for(i=s;i<e;i++)
cout<<i<<"+";
cout<<i<<endl;
}
void fun()
... {
int i;
for(i=1;i<N;i++)
...{
int t=isAdd(i);
if(t==0) continue;
else
...{
t1=i;
t2=t;
output(t1,t2);
}
}
}
int main()
... {
cin>>N;
fun();
return 0;
}
#include < iostream >
using namespace std;
int N;
int t1,t2;
int isAdd( int s)
... {
int i;
int sum=0;
for(i=s;i<=N;i++)
...{
sum+=i;
if(sum==N) return i;
if(sum>N) return 0;
}
return 0;
}
void output( int s, int e)
... {
cout<<N<<"=";
int i;
for(i=s;i<e;i++)
cout<<i<<"+";
cout<<i<<endl;
}
void fun()
... {
int i;
for(i=1;i<N;i++)
...{
int t=isAdd(i);
if(t==0) continue;
else
...{
t1=i;
t2=t;
output(t1,t2);
}
}
}
int main()
... {
cin>>N;
fun();
return 0;
}