【Matlab】怎么生成23个范围为1-6的整数,且这些数的和为124

【Matlab】怎么生成23个范围为1-6的整数,且这些数的和为124
急求!
帅古风 1年前 已收到2个回答 举报

lshiwbqd 幼苗

共回答了24个问题采纳率:87.5% 举报

硬干吧,
124/23 = 5.3913043478260869565217391304348,故肯定存在取值为6的.
124-5*23 = 9,故至少存在9个6;故问题转换为
怎么生成23-9=14个范围为1-6的整数,且这些数的和为124-9*6 = 70?
这个问题的复杂度为6^14 = 2^36.189475010096186540352345215269,
PC机几分钟可以算出来.

1年前 追问

1

帅古风 举报

能给个程序吗,我用的是这个 while 1 C=[randint(1,22,[1,6])]; e=124-sum(C); if(1<=e && e<=6) C=[C,e]; break; end end 但是算了n个小时都算不出来

举报 lshiwbqd

故问题转换为 怎么生成23-9=14个范围为1-6的整数,且这些数的和为124-9*6 = 70? 已经确定另外9个数为6了,目前仅需要确定剩下的14个数即可. 按新的问题编写类似的程序

毕业于黑龙江gg 幼苗

共回答了3个问题 举报

6的个数不得少于9个,问题转换为求14个大小在1-6之间数,它们之和为70;
14个数中,1的个数不得多于三个,否则加起来绝对会小于70;
这么一来只要做很少的循环就好了,运行时间不超过1秒~
我不太擅长编程,随便写了一个脑残的,结果还是可以的。
clear;clc;
a=0;
for n1=0:2
for n2=0:(14-n1)

1年前

0
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 19 q. 0.071 s. - webmaster@yulucn.com