查看: 162|回复: 10|关注: 0

[已答复] n个数相加小于等于整数n0的所有情况?

[复制链接]

新手

10 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
发表于 6 天前 | 显示全部楼层 |阅读模式
n个数相加小于等于整数n0的所有情况?目前我能做的就是for循环,不过效率及其低下,有没有好的方法,下附一个n=10的代码。

function index=JJ(n0)


index1=[];
k=1;
for i1=0:n0
    for i2=0:n0
        for i3=0:n0
            for i4=0:n0
                for i5=0:n0
                   for i6=0:n0
                      for i7=0:n0
                         for i8=0:n0
                             for i9=0:n0
                                 for i10=0:n0
                                  if (i1+i2+i3+i4+i5+i6+i7+i8+i9+i10)<=n0                              
                                      index1(:,k)=[i1 i2 i3 i4 i5 i6 i7 i8 i9 i10]';
                                       k=k+1;
                                  end

                                 end
                             end
                         end
                      end
                   end
                end
            end
        end
    end
end

index=index1;      




end



回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

5

主题

2590

帖子

790

最佳答案
  • 关注者: 218
发表于 6 天前 | 显示全部楼层
提问请:①准确描述问题②提出你的思考(等着抄作业的一律锁帖)③提供代码文本而非截图④及时反馈
回复此楼 已获打赏: 0 积分

举报

新手

10 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 5 天前 | 显示全部楼层
TouAkira 发表于 2020-11-20 23:47
跟这个类似
https://www.ilovematlab.cn/thread-603548-1-1.html

你好,我是想打印所有的排列情况,不仅仅是有多少个情况。不过谢谢你的回答。
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

4

主题

1658

帖子

205

最佳答案
  • 关注者: 95
发表于 5 天前 | 显示全部楼层
循环要优化,速度能提升非常多吧
for i2=0:n0-i1
for i3=0:n0-i1-i2
...
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

5

主题

2590

帖子

790

最佳答案
  • 关注者: 218
发表于 5 天前 | 显示全部楼层
szzejz 发表于 2020-11-21 03:49
你好,我是想打印所有的排列情况,不仅仅是有多少个情况。不过谢谢你的回答。 ...
Lykin000 发表于 2020-11-9 21:31
要展示每种方法是如何分的
maple1314168 发表于 2020-11-9 21:43
10/20那道题,先拆分,不考虑顺序。得到42组。
在42组中,各自排序得到所有的可能
自己弄弄吧。

maple1314168 介绍过思路,当然要是现成的代码,那是没有的。
提问请:①准确描述问题②提出你的思考(等着抄作业的一律锁帖)③提供代码文本而非截图④及时反馈
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

8

主题

1533

帖子

269

最佳答案
  • 关注者: 156
发表于 5 天前 | 显示全部楼层
很典型的一道用递归解决的排列组合问题。
兴趣是最好的导师——让Matlab入门从游戏开始
https://www.ilovematlab.cn/thread-546885-1-1.html
回复此楼 已获打赏: 0 积分

举报

新手

10 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 5 天前 | 显示全部楼层
悟得 发表于 2020-11-21 20:44
很典型的一道用递归解决的排列组合问题。

你好,我也查过可以利用递归,但我不知道应该怎么设计这个递归呢?
回复此楼 已获打赏: 0 积分

举报

新手

10 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 5 天前 | 显示全部楼层
coolchen302 发表于 2020-11-21 18:44
循环要优化,速度能提升非常多吧
for i2=0:n0-i1
for i3=0:n0-i1-i2

谢谢你的回答,这样应该可以优化循环,但这个只是个例子。其实我需要计算100个数相加的小于一个整数n0,甚至更多,这样的话100的循环也是不现实的,我也想到可以利用递归,但是我不知道应该怎样设计这个递归?
回复此楼 已获打赏: 0 积分

举报

新手

10 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 4 天前 | 显示全部楼层
TouAkira 发表于 2020-11-21 19:10
maple1314168 介绍过思路,当然要是现成的代码,那是没有的。

那如果是一个高维的向量(超过10维)的排列,应该怎么做呢?
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

权威

4641 麦片

财富积分



5

主题

4611

帖子

995

最佳答案
  • 关注者: 226
发表于 4 天前 | 显示全部楼层
本帖最后由 maple1314168 于 2020-11-22 23:53 编辑
szzejz 发表于 2020-11-22 10:22
那如果是一个高维的向量(超过10维)的排列,应该怎么做呢?

你的电脑什么水平?神威?
单纯100个>=0的数和为100的数量(考虑顺序)C(199,99):
45274257328051640582702088538742081937252294837706668420660

回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /5 下一条

快速回复 返回顶部 返回列表