
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,很容易实现,现在的问题是大小可以变化,怎样实现?
谢谢 展开
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,很容易实现,现在的问题是大小可以变化,怎样实现?
谢谢 展开
4个回答
展开全部
初始化所有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;
}
得到一组数据
}
}
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;
}
得到一组数据
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是给你分析了吗?你还直接要答案了啊?
大小可以变化,有2个解决方案,
一个就是你估计他最大不超过多少,你就给他写一个这么大的数组.
另一个就是用动态内存的方式,每次获取这么大的内存.
大小可以变化,有2个解决方案,
一个就是你估计他最大不超过多少,你就给他写一个这么大的数组.
另一个就是用动态内存的方式,每次获取这么大的内存.
追问
我只想知道怎样循环,你如果不懂不要回答。
追答
菜鸟,还觉得我不懂.
搞笑,思路都告诉你了,你自己不会写啊
然后你看看你的问题,问的是"现在的问题是大小可以变化,怎样实现?"
有问怎么循环了吗?
没本事别写,来问了就态度好点.谁又不欠你的.还想直接要源代码呢?
=============================
算了,还是直接告诉你吧,这个用循环很难实现,因为这个题目的答案数量是一个排列组合数,而循环一般得到的是一个平方数,要用循环来实现,那么肯定有重复记录的.要么算法很复杂(因为要去掉排列组合重复).
============================
我已经有算法了,只要2个数组就搞定.还是中学的方法简单啊~~哈哈
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
求出c[i],算法还是很复杂的
我提供给你一个思路,采用进制法,比如说
n=4,k=3
就可以3位5进制法,001,002,003,004,010.。。。
懂了吧
我提供给你一个思路,采用进制法,比如说
n=4,k=3
就可以3位5进制法,001,002,003,004,010.。。。
懂了吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
真有趣呢。。。。呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询