该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
经过一个月的学习。我想出来了一种算法,各位高手指点
我是楼主
#include
int arrgroup[11]={0};
/*表示分组情况的数组*/
int arrdata[11]={0,100,50,60,1,96,8,6,4,4,4};
/*输入的10个数*/
int arrout[11]={0};
/*输出的分组情况*/
int *p=arrgroup;
int delta=0,delta0=32767;
void group(int *p,int n)
/*用递归的方法分组*/
{
int sum[4]={0};
int i;
if(n>0)
{
for(i=1;i<=3;i++)
{
*(p+n)=i;group(p,n-1);
}
}
else
/*当分组完成之后*/
{
for(i=1;i<=10;i++)
{
sum[arrgroup[i]]+=arrdata[i];
}
if (sum[1]
if (sum[1]
if (sum[2]
/*分组求和排序*/
delta=sum[1]-sum[3];
if (delta
{
delta0=delta;
for(i=0;i<=11;i++)
{
arrout[i]=arrgroup[i];
}
/*寻找差最小的情况*/
}
}
}
void main(void)
{
int i;
group(p,10);
for(i=1;i<=10;i++)
printf("%3d %3d\n",arrdata[i],arrout[i]);
printf("\n");
}