matlab中利用枚举法在给定范围内找出目标值的分解

要求:给定了一个数组和一个目标值,找出数组中哪些数据可构成目标值,并将其输出。

在所有方法中枚举法最为简单但却最容易理解。

具体思路

 生成一个随机的决策数组b,b中的数据只有0和1,将b与a相乘再求和,可以得到一个值c。

若c与k相等,将一维向量b存放到二维向量n中,重复k次。完成之后,利用unique函数删除

掉n中重复的行,最后通过size函数以及一个for循环,输出a中所有可能的数据搭配。

代码如下

clear;clc;
k=459;%目标值

s=1;
a=[57,71,87,97,99,101,103,113,114,115,128,129,131,137,147,156,163,186];%给定数组
while s<=k    %让s循环k次
    b=rand(1,18);
    for i=1:18  
        if b(i)<0.5
        b(i)=0;
        else
        b(i)=1;
        end
    end
     c=sum(a.*b);
  if c == k 
      n(s,:)=b;  %构建一个数组存放所有符合要求的b数组
      s=s+1;
  end
end
e=unique(n,'rows');  %利用unique删除重复的行
[f,g]=size(e); %找出e的行数、列数
for r=1:f
    j(r,:)=a.*e(r,:);    %构建一个新的数组来存放处理后的a数组
end
disp(j)   %输出j数组

缺点:当a中的数据增多时,循环的次数可能不足以找出所有的b,并且计算时间长

优点:方法简单,适合新手练习

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值