用MATLAB,把10个数随机分成四组,要求就是不得有空集,就是每组最少要有1个元素,而且数的顺序不能变,只能按顺序选择
你好,同学,一行代码就行了:
groups = mat2cell(1:10,1,diff([0,sort(randperm(9,3)),10]));
celldisp(groups)% 这行是显示结果
下面是一些结果(随机的运行几次):
结果1
groups{1} =
1 2
groups{2} =
3
groups{3} =
4
groups{4} =
5 6 7 8 9 10
结果2
groups{1} =
1 2
groups{2} =
3 4 5 6 7
groups{3} =
8 9
groups{4} =
10
结果3
groups{1} =
1 2 3 4
groups{2} =
5 6
groups{3} =
7 8 9
groups{4} =
10
你要获取某一个组的数据,只要通过这样写就行
s = groups{i}% i是第几组的序号即1,2,3,4,s就是你要的那个组的数字!!!
——————————————————————————————————————————————
思维扩展:
m个数,随机分成n组,要求就是不得有空集,就是每组最少要有1个元素,而且数的顺序不能变。
a = [5,4,3,1,4,5,6,7,1,9,2,1,7,2,3,1]; % a 的大小为m=16,这里就是m个数字
m = length(a); % a的元素个数
n = 4; % 自己设,反正要小于等于m,我这里设置4个组
groups = mat2cell(a,1,diff([0,sort(randperm(m-1,n-1)),m]));
celldisp(groups)%显示
给出一个随机结果
groups{1} =
5 4 3 1
groups{2} =
4 5 6 7
groups{3} =
1 9 2
groups{4} =
1 7 2 3 1
1.生成1-7之间的随机数n1作为第一组个数
2.生成1到10-n1-2之间的随机数n2
3. 1到10-n1-n2-1
n=[0,0,0,0];
n(1)=unidrnd(7);
n(2)=unidrnd(8-n(1));
n(3)=unidrnd(9-n(1)-n(2));
n(4)=10-sum(n(1:3));
原理就是在十个数之间的九个空隙随机挑三个空隙插入三个隔板,就能把十个数分成四份且每份至少有一个数
代码:
v=1:10;
groupNum=4;
[~,sep]=sort(rand([1,length(v)-1]));
sep=[0,sort(sep(1:gropNum-1)),length(v)];
for i=1:4
group{i}=v(sep(i)+1:sep(i+1));
disp(group{i})
end
计算结果(展示其中几次):
1
2 3
4 5 6 7 8
9 10
1 2 3
4 5
6 7
8 9 10
1 2 3 4
5
6 7 8
9 10