楼主: 天下大平
2046 8

[其他] matlab 如果找出满足一个数字组合不包含另一组数字的组合 [推广有奖]

  • 1关注
  • 0粉丝

博士生

33%

还不是VIP/贵宾

-

威望
0
论坛币
5805 个
通用积分
14.4546
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
19235 点
帖子
47
精华
0
在线时间
509 小时
注册时间
2009-10-12
最后登录
2023-7-21

楼主
天下大平 发表于 2015-6-29 09:13:39 |AI写论文
100论坛币
   问题描述如下:从1,2,3,4,5,6,7,8中选出4个进行组合,该组合必须满足以下两个条件:(1)含有1,3,5,7中的一个数字
;(2)组合中不能同时含有(1,8),(2,5),(3,5),(4,7)。找出满足条件的组合。
   本人是一初学者,谢谢各位了。

最佳答案

sjhai 查看完整内容

最终结果为14组 1 2 3 4 1 2 3 6 1 2 3 7 1 2 4 6 1 2 6 7 1 3 4 6 1 3 6 7 1 4 5 6 1 5 6 7 2 3 4 6 2 3 4 8 2 3 6 7 2 3 6 8 2 3 7 8
关键词:MATLAB matla atlab Lab Atl matlab

沙发
sjhai 发表于 2015-6-29 09:13:40
最终结果为14组
     1     2     3     4
     1     2     3     6
     1     2     3     7
     1     2     4     6
     1     2     6     7
     1     3     4     6
     1     3     6     7
     1     4     5     6
     1     5     6     7
     2     3     4     6
     2     3     4     8
     2     3     6     7
     2     3     6     8
     2     3     7     8
已有 1 人评分经验 收起 理由
giresse + 80 精彩帖子

总评分: 经验 + 80   查看全部评分

藤椅
sjhai 发表于 2015-6-29 13:35:32
clear
clc
x=combntns(1:8,4);%从1-8中选出4个的全部组合
[l1,l2]=size(x);
c1=[1,3,5,7];
t=1;
for i=1:l1
    flat=0;
    if sum(x(i,:)==c1)~=0  %第一个条件
        flat=1;
        %第二个条件
        if x(i,1)==1 && x(i,l2)==8 %不含(1,8)
            flat=0;
        end
        for j=1:l2-1 %不含(2,5)
            if x(i,j)==2
                for k=j+1:l2
                    if x(i,k)==5
                        flat=0;
                        break;
                    end
                end
            end
            if flat==0
                break;
            end
        end
        for j=1:l2-1 %不含(3,5)
            if x(i,j)==3
                for k=j+1:l2
                    if x(i,k)==5
                        flat=0;
                        break;
                    end
                end
            end
            if flat==0
                break;
            end
        end
        for j=1:l2-1  %不含(4,7)
            if x(i,j)==4
                for k=j+1:l2
                    if x(i,k)==7
                        flat=0;
                        break;
                    end
                end
            end
            if flat==0
                break;
            end
        end
    end
    if flat==1  %满足条件1,2的组合
        y(t,:)=x(i,:);
        t=t+1;
    end
end
%结果输出
y
        
已有 1 人评分论坛币 收起 理由
admin_kefu + 50 热心帮助其他会员

总评分: 论坛币 + 50   查看全部评分

板凳
天下大平 发表于 2015-6-29 14:13:59
谢谢,回家我在电脑上运行下。

报纸
sjhai 发表于 2015-6-29 14:35:08
天下大平 发表于 2015-6-29 14:13
谢谢,回家我在电脑上运行下。
额,程序第一个条件还不太对,现修改如下:

clear
clc
x=combntns(1:8,4);%从1-8中选出4个的全部组合
[l1,l2]=size(x);
t=1;
for i=1:l1
    flat=0;
    find(x(i,:)==1)
    if ~isempty(find(x(i,:)==1, 1)) ||  ~isempty(find(x(i,:)==3, 1)) ||  ~isempty(find(x(i,:)==5, 1))||  ~isempty(find(x(i,:)==7, 1))  %第一个条件
        flat=1;
        %第二个条件
        if x(i,1)==1 && x(i,l2)==8 %不含(1,8)
            flat=0;
        end
        for j=1:l2-1 %不含(2,5)
            if x(i,j)==2
                for k=j+1:l2
                    if x(i,k)==5
                        flat=0;
                        break;
                    end
                end
            end
            if flat==0
                break;
            end
        end
        for j=1:l2-1 %不含(3,5)
            if x(i,j)==3
                for k=j+1:l2
                    if x(i,k)==5
                        flat=0;
                        break;
                    end
                end
            end
            if flat==0
                break;
            end
        end
        for j=1:l2-1  %不含(4,7)
            if x(i,j)==4
                for k=j+1:l2
                    if x(i,k)==7
                        flat=0;
                        break;
                    end
                end
            end
            if flat==0
                break;
            end
        end
    end
    if flat==1  %满足条件1,2的组合
        y(t,:)=x(i,:);
        t=t+1;
    end
end
%结果输出
y
        


最终结果(19组):
1     2     3     4
     1     2     3     6
     1     2     3     7
     1     2     4     6
     1     2     6     7
     1     3     4     6
     1     3     6     7
     1     4     5     6
     1     5     6     7
     2     3     4     6
     2     3     4     8
     2     3     6     7
     2     3     6     8
     2     3     7     8
     2     6     7     8
     3     4     6     8
     3     6     7     8
     4     5     6     8
     5     6     7     8
已有 1 人评分经验 收起 理由
giresse + 100 精彩帖子

总评分: 经验 + 100   查看全部评分

地板
天下大平 发表于 2015-6-29 19:40:26
谢谢了。另如果不含三个元素,如不含(2,3,6)那该怎么编啊?

7
天下大平 发表于 2015-6-29 19:41:19
感觉好笨啊,麻烦您了。

8
sjhai 发表于 2015-6-30 10:02:46
天下大平 发表于 2015-6-29 19:40
谢谢了。另如果不含三个元素,如不含(2,3,6)那该怎么编啊?
clear
clc
x=combntns(1:8,4);%从1-8中选出4个的全部组合
[l1,l2]=size(x);
c1=[1,3,5,7];
t=1;
for i=1:l1
    flat=0;
    if sum(x(i,:)==c1)~=0  %第一个条件
        flat=1;
        %第二个条件
        if x(i,1)==1 && x(i,l2)==8 %不含(1,8)
            flat=0;
        end
        for j=1:l2-1 %不含(2,5)
            if x(i,j)==2
                for k=j+1:l2
                    if x(i,k)==5
                        flat=0;
                        break;
                    end
                end
            end
            if flat==0
                break;
            end
        end
        for j=1:l2-1 %不含(3,5)
            if x(i,j)==3
                for k=j+1:l2
                    if x(i,k)==5
                        flat=0;
                        break;
                    end
                end
            end
            if flat==0
                break;
            end
        end
        for j=1:l2-1  %不含(4,7)
            if x(i,j)==4
                for k=j+1:l2
                    if x(i,k)==7
                        flat=0;
                        break;
                    end
                end
            end
            if flat==0
                break;
            end
        end
        for j=1:l2-2  %不含(2,3,6)
            if x(i,j)==2
                for k=j+1:l2-1
                    if x(i,k)==3
                        for m=k+1:l2
                            if x(i,m)==6
                                flat=0;
                                break;
                            end
                        end
                    end
                    if flat==0
                        break;
                    end
                end
            end
            if flat==0
                break;
            end
        end
    end
    if flat==1  %满足条件1,2的组合
        y(t,:)=x(i,:);
        t=t+1;
    end
end
%结果输出
y

最终结果(10组):
     1     2     3     4
     1     2     3     7
     1     2     4     6
     1     2     6     7
     1     3     4     6
     1     3     6     7
     1     4     5     6
     1     5     6     7
     2     3     4     8
     2     3     7     8
已有 1 人评分经验 收起 理由
giresse + 60 精彩帖子

总评分: 经验 + 60   查看全部评分

9
天下大平 发表于 2015-6-30 12:57:19
谢谢了。

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

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-27 06:54