求不重复的和.

godmess 2008-01-19 04:34:32
随机给出5个不重复数字, 挑选1 - 5个元素相加, 问有多少种不重复的和.(求数量)

给我个思路就好了, 有没有代码随意, 谢谢.
...全文
150 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ProjectDD 2008-01-20
  • 打赏
  • 举报
回复
组合筛选问题
cnzdgs 2008-01-19
  • 打赏
  • 举报
回复
假设N个数字,大致思路是:

1、构造一个链表,储存所有的和。
struct NODE
{
NODE* Next;
int Sum;
};
typedef NODE* PNODE;

2、设计一个递归函数来就N个数字各种组合的和。
函数先将第1个数记入链表,再去掉第1个数递归,然后根据递归的结果计算出加上第1个数的和。
PNODE CalcSums(PNODE LastSum, PINT Numbers, int Count) // LastSum指向链表的最后结点,Numbers指向要求和的数组,Count是要求和的数的个数,返回值是执行后链表的最后结点。
{
PNODE current, next, first, last;

current = new NODE;
current->Sum = *Numbers++;
LastSum->Next = current;
if (--Count > 0)
{
last = CalcSums(current, Numbers, Count);
first = current->Next;
current = last;
for (next = first; next != last->Next; next = next->Next)
{
PNODE node = new NODE;
node->Sum = next->Sum + Number;
current->Next = node;
current = node;
}
}
current->Next = NULL;
return current;
}
3、用一个循环统计不重复的和。
Best_Caniggia 2008-01-19
  • 打赏
  • 举报
回复
如果5个数范围不大:

f[i]=true 表示 i可以用5个数字中的某几个相加获得

for(j=1;j<=5;j++)
{
if(f[i-num[j]])
{
f[j]=true;
break;
}
}

依次遍历所有可能的和,初值f[num[j]] = true

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧