有n个数值,现在要把这些值按相加的和不超过m分为一组,而且要尽量保持这些数值的顺序
例如,3,2,4,3,9,2,3,4,5这几个数,
相加后的和不超过10时进行分组
那么其结果如下:
第一组:3,2,4
第二组:3,2,3
第三组:9
第四组:4,5
现在向各位大哥请教用程序怎么解决
题目没错,程序我编出来了......
#include<stdio.h>
#define m 10 //相加之和不超过的数据
#define n 9 //数值的个数
typedef struct
{
int num; //存储数值
int boolean; //凑数数值是否已经输出 .是0则未输出,是1则已经输出
}NUM; //存储数据的数据结构
NUM aa[n]; //存储数值
static int count=1;//存储输出的组数据
void FUN() //递归函数体
{
int i,temp=0;
for(i=0;i<n;i++)
{
temp=temp+aa[i].boolean; //把所有的boolean值加起来,如果总和小于n则有未输出的数
}
if(temp<n) //如果有未输出的数据,则执行递归
{
temp=0; //清空缓存
printf("第%d组:",count++);
for(i=0;i<n;i++)
{
if(temp+aa[i].num<=m&&aa[i].boolean==0)
{
temp=temp+aa[i].num;
printf("%d ",aa[i].num);
aa[i].boolean=1;
}
else continue;
}
printf("\n");
}
else return; //如果数据都已经输出,退出递归
FUN();
}
void INPUT()
{
int i;
printf("*******************************本人已死##有事烧纸******************************\n");
printf("-------------------------------------------------------------QQ:54482733-------\n");
printf("请输入你要求分组的数据:\n");
for(i=0;i<n;i++)
{
scanf("%d",&aa[i].num);
aa[i].boolean=0;
getchar();
}
}
main()
{
INPUT();
FUN();
}
[此贴子已经被作者于2006-4-2 21:55:16编辑过]