这类问题一般需要先转化成数学模型,然后根据条件来实现。设最小的数为m,则x=m+(m+1)+(m+2)+....+(m+n-1),求出m = (2x-n*n+n)/(2n),m为正整数且m<x。
#include <stdio.h>
#include <stdlib.h>
void fun(int x)
{
int n = 2;//连续正整数的个数
float tmp = 0.0;
int m = 0;//连续正整数中最小的
for (; n < x;n++)
{
tmp = (2*x-n*n+n)/(2*n);
m = (int)tmp;
if (((2*x-n*n+n)%(2*n) == 0) && m >= 1 && m < x)
{
printf("n=%d,m=%d\n",n,m);
}
}
}
int main(int argc,char* argv[])
{
if (argc < 2)
{
printf("error\n");
exit(0);
}
int x = atoi(argv[1]);
fun(x);
return 0;
}