C语言源程序求助

k给定。让n从0开始,每次n增加1。怎样实现下面算法?lambda=h-c[0]a[0]-c[1]a[1]-...-c[k-1]a[k-1].现在a[i],lambda,... k给定。让n从0开始,每次n增加1。怎样实现下面算法?lambda=h-c[0]a[0]-c[1]a[1]-...-c[k-1]a[k-1]. 现在a[i], lambda, h都给定,要求求出数组c[0],c[1],...,c[k-1], 使得c[0]+...+c[k-1]=n, c[i] 为非负整数。要求得到所有可能数组,且按字典序得到。例如,n=4, k=3, 要求得到数组c[0], c[1], c[2] 的顺序为
c[0]=0, c[1]=0, c[2]=4;
0, 1, 3; (为c[i] 的值)
0, 2, 2;
0, 3, 1;
0, 4, 0;
1, 0, 3;
1, 1, 2;
1, 2, 1;
1, 3, 0;
2, 0, 2;
2, 1, 1;
2, 2, 0;
3, 0, 1;
3, 1, 0;
4, 0, 0;
每次得到一组c[0], c[1], c[2], 然后要进行其他运算。现在的问题是,k的大小由键盘输入,所以大小可以变化。如果大小固定,比如是3,很容易实现,现在的问题是大小可以变化,怎样实现?
谢谢
展开
 我来答
mvplover1985
2011-07-29 · TA获得超过223个赞
知道小有建树答主
回答量:419
采纳率:0%
帮助的人:354万
展开全部
初始化所有c[i]都位0
i= 0;
for(x = 0; x <n; x++){
for(y = 0; y <k; y++ ){
if(lambda != h-c[0]a[0]-c[1]a[1]-...-c[k-1]a[k-1] )
{
c[k] = c[k] + 1;
continue;
}
if(c[0]+...+c[k-1]!=n)
{
c[k] = c[k] + 1;
continue;
}
得到一组数据
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
clitoriscn
2011-07-29 · TA获得超过3628个赞
知道小有建树答主
回答量:3258
采纳率:0%
帮助的人:1564万
展开全部
不是给你分析了吗?你还直接要答案了啊?

大小可以变化,有2个解决方案,
一个就是你估计他最大不超过多少,你就给他写一个这么大的数组.
另一个就是用动态内存的方式,每次获取这么大的内存.
追问
我只想知道怎样循环,你如果不懂不要回答。
追答
菜鸟,还觉得我不懂.
搞笑,思路都告诉你了,你自己不会写啊

然后你看看你的问题,问的是"现在的问题是大小可以变化,怎样实现?"
有问怎么循环了吗?

没本事别写,来问了就态度好点.谁又不欠你的.还想直接要源代码呢?
=============================
算了,还是直接告诉你吧,这个用循环很难实现,因为这个题目的答案数量是一个排列组合数,而循环一般得到的是一个平方数,要用循环来实现,那么肯定有重复记录的.要么算法很复杂(因为要去掉排列组合重复).

============================
我已经有算法了,只要2个数组就搞定.还是中学的方法简单啊~~哈哈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
361403132
2011-07-29 · 超过13用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:0
展开全部
求出c[i],算法还是很复杂的
我提供给你一个思路,采用进制法,比如说
n=4,k=3
就可以3位5进制法,001,002,003,004,010.。。。
懂了吧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
iceraine
2011-07-29 · 超过16用户采纳过TA的回答
知道答主
回答量:85
采纳率:0%
帮助的人:46.6万
展开全部
真有趣呢。。。。呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式