问题是这样的:
有一个数x, 0<=x<=1000, 把它拆分成几个数的和,x1+x2+......xn=x,使得x1,x2,x3.....xn的最小公倍数最大,
要求输入这个数 x,输出最小公倍数 S。
讲讲思路。谢谢。
如果不要求效率的话我可以写一个.
现在试试.
#include<stdio.h>
typedef struct{
int value;
int max;
}data;
int addvalue(int num)
{
int i=1,sum=0;
while(i*i<num)
{
if(num%i==0)
sum+=(i+num/i);
i++;
}
if(i*i==num)
{
sum+=i;
}
return(sum);
}
int chazhao(data a[],int n,int num)
{
int i=n-1;
while(i>=0&&a[i].max>num)
{
i--;
}
return(i+1);
}
int main()
{
int n,i=1,j=2,sum,num;
data a[300];
a[0].value=1;
a[0].max=1;
printf("input a number that is smaller than 1000:");
scanf("%d",&num);
while(a[i-1].max<=1000)
{
sum=addvalue(j);
if(a[i-1].max<sum)
{
a[i].max=sum;
a[i].value=j;
}
else
{
i--;
}
i++;
j++;
}
printf("%d\n",a[chazhao(a,i,num)].value);
/*while(--i>=0)显示数组内各以value为公倍数的最大和X
{
printf("%d %d\n",a[i].value,a[i].max);
}*/
getch();
return(0);
}
/*看看可以不*/