LK2001YYDS 2022-11-12 16:42 采纳率: 66.7%
浏览 189
已结题

matlab求一组数字的组合数(不重复)

img


本人遇到的问题是用matlab对一组数字求组合数,要求不重复。
问题如下:把我的学号2020330361020拆成一个个元素,比如12拆成1和2。再进行3个数的组合,比如{0 0 2}。因为学号里的元素有重复,所以要求输出不重复的所有组合数的情况,求一个function子函数。
有没有人会,有酬。

  • 写回答

4条回答 默认 最新

  • Wayne_Fine Matlab领域优质创作者 2022-11-12 23:00
    关注

    demo:

    clc,clear,close all;
     
    stID = '2020330361020'; 
    x1 = zeros(1,length(stID));
    for i = 1:length(stID)  
        x1(i) = str2double(stID(i)); %元素分割
    end
    x2 = unique(x1);  %去重
    restID(x2)
    unique(restID(x1),'rows')
    
    function y = restID(x) %全组合子函数
        y = nchoosek(x,3);  %实现组合的核心函数
    end
    
    

    示例1:

    clc,clear,close all;
     
    stID = '2020330361020'; 
    x1 = zeros(1,length(stID));
    for i = 1:length(stID)  
        x1(i) = str2double(stID(i)); %元素分割
    end
    disp("学号中的所有元素:")
    x1
    disp("去重后的元素:")
    x2 = unique(x1)  %去重
    disp("全组合(3个一组):")
    restID(x2)
    
    function y = restID(x) %全组合子函数
        y = nchoosek(x,3); %参数2表示几个一组合
    end
    
    

    结果1:

    学号中的所有元素:
    
    x1 =
    
         2     0     2     0     3     3     0     3     6     1     0     2     0
    
    去重后的元素:
    
    x2 =
    
         0     1     2     3     6
    
    去重后的全组合:
    ans =
    
         0     1     2
         0     1     3
         0     1     6
         0     2     3
         0     2     6
         0     3     6
         1     2     3
         1     2     6
         1     3     6
         2     3     6
    
    

    示例2:

    clc,clear,close all;
     
    stID = '2020330361020'; 
    x1 = zeros(1,length(stID));
    for i = 1:length(stID)  
        x1(i) = str2double(stID(i)); %元素分割
    end
    disp("学号中的所有元素:")
    x1
    disp("去重后的元素:")
    x2 = unique(x1)  %去重
    disp("去重后的全组合(3个一组):")
    restID(x2)
    disp("去重前的全组合(并剔除重复):")
    unique(restID(x1),'rows')  %由于去重前的学号里有重复元素,所以组合结果会有重复行,使用unique函数按行剔除重复组即可
    function y = restID(x) %全组合子函数
        y = nchoosek(x,3); %参数2表示几个一组合,可自定义修改
    end
    
    

    结果2:

    学号中的所有元素:
    
    x1 =
    
         2     0     2     0     3     3     0     3     6     1     0     2     0
    
    去重后的元素:
    
    x2 =
    
         0     1     2     3     6
    
    去重后的全组合(3个一组):
    
    ans =
    
         0     1     2
         0     1     3
         0     1     6
         0     2     3
         0     2     6
         0     3     6
         1     2     3
         1     2     6
         1     3     6
         2     3     6
    
    去重前的全组合(并剔除重复组合):
    
    ans =
    
         0     0     0
         0     0     1
         0     0     2
         0     0     3
         0     0     6
         0     1     0
         0     1     2
         0     2     0
         0     2     1
         0     2     2
         0     2     3
         0     2     6
         0     3     0
         0     3     1
         0     3     2
         0     3     3
         0     3     6
         0     6     0
         0     6     1
         0     6     2
         1     0     0
         1     0     2
         1     2     0
         2     0     0
         2     0     1
         2     0     2
         2     0     3
         2     0     6
         2     1     0
         2     1     2
         2     2     0
         2     2     1
         2     2     2
         2     2     3
         2     2     6
         2     3     0
         2     3     1
         2     3     2
         2     3     3
         2     3     6
         2     6     0
         2     6     1
         2     6     2
         3     0     0
         3     0     1
         3     0     2
         3     0     3
         3     0     6
         3     1     0
         3     1     2
         3     2     0
         3     3     0
         3     3     1
         3     3     2
         3     3     3
         3     3     6
         3     6     0
         3     6     1
         3     6     2
         6     0     0
         6     0     2
         6     1     0
         6     1     2
         6     2     0
    
    

    使用到的相关函数官方手册教程:
    unique函数:https://ww2.mathworks.cn/help/matlab/ref/double.unique.html?s_tid=doc_ta#d124e1504952
    nchoosek函数:https://ww2.mathworks.cn/help/matlab/ref/nchoosek.html?s_tid=doc_ta

    已解决问题全部情况,望采纳,有问题请留言,看到就回,简单的修改可以自行尝试调试,感谢合作!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月21日
  • 已采纳回答 11月13日
  • 请采纳用户回复 11月12日
  • 创建了问题 11月12日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部