1-50这50个数字,要求得到 和为100的7个数字(不能重复)的所有可能性

starcbh 2003-12-15 04:06:55
1-50这50个数字,要求得到 和为100的7个数字(不能重复)的所有可能性
我是算法菜鸟,哪位帮一下忙!!
...全文
150 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
starcbh 2003-12-16
  • 打赏
  • 举报
回复
另开一贴给NowCan(能量、激情、雨水、彩虹——雷雨云) 100分

NowCan 2003-12-15
  • 打赏
  • 举报
回复
/*
1-50这50个数字,要求得到 和为100的7个数字(不能重复)的所有可能性
递归回溯做,增加剪枝函数
从1开始从小到大取这7个数,若取到当前第i个数发现后面就算是取7-i个最大数(这里为50)也不能达到100则返回,否则递归求解下一个数i+1.
*/
#include <stdio.h>

static long a[8]={0},sum,count=0;

void find(long d)
{
for(long i=a[d-1]+1;i<=50;i++)
{
a[d]=i;
sum=0;
for(long j=1;j<=d;j++)
{
sum+=a[j];
}
if(sum==100&&d==7)
{
count++;
//printf("%d+%d+%d+%d+%d+%d+%d=100\n",a[1],a[2],a[3],a[4],a[5],a[6],a[7]);
}
else if((sum+(7-d)*50>=100)&&(sum+(7-d)*1<=100))
{
find(d+1);
}
}
}

int main()
{
find(1);
printf("Total: %ld\n",count);
return 0;
}
为了速度,注释了输出语句。
fengbaoshiyi 2003-12-15
  • 打赏
  • 举报
回复
c[7,50,100]=c[6,49,50]+[7,49,100]

[i,j,k]=[i-1,j-1,k-j]+[i,j-1,k]

[1,j,k]=1 (j==k)
=0 (j!=k)
starcbh 2003-12-15
  • 打赏
  • 举报
回复
能细一点最好,呵呵
starcbh 2003-12-15
  • 打赏
  • 举报
回复
xd,谢了,搞定了给分
SoftWare1999 2003-12-15
  • 打赏
  • 举报
回复
10+11+13+14+16+17+19=100
10+11+13+15+16+17+18=100
10+12+13+14+15+16+20=100
10+12+13+14+15+17+19=100
10+12+13+14+16+17+18=100
11+12+13+14+15+16+19=100
11+12+13+14+15+17+18=100

共:102585种
就用递规,剪枝,飞快。
gushaoping 2003-12-15
  • 打赏
  • 举报
回复


递归回溯做,增加剪枝函数
从1开始从小到大取这7个数,若取到当前第i个数发现后面就算是取7-i个最大数(这里为50)也不能达到100则返回,否则递归求解下一个数i+1.
starcbh 2003-12-15
  • 打赏
  • 举报
回复
自已顶一下

33,008

社区成员

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

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