首页 文章

用逻辑条件在matlab中编程

提问于
浏览
0

我有一点逻辑问题,有一天我想解决!!假设你有4个变量,我将它们称为a,b,c和d . 现在基于某些逻辑给出以下条件 .

该计划通过:

  • 如果a和c都被填充

  • 如果a和d都被填充

  • 如果b和c都填满了

  • 如果b和d都填满了

  • 如果c和d都填满了

程序失败:

  • 如果只有a填充

  • 如果只填充b

  • 如果只填充了c

  • 如果只填充了d

  • 如果a和b都被填充

因此,如果您填写一个变量,您将被迫填写更多 . 如果您没有填写任何变量,则无需执行任何操作 .

为了保持简单,我说1等于填充,0等于未填充 . 我的代码片段工作不正常,因为如果我说只有d填充它会回复说这没关系 . 但它不应该工作,因为只有d是失败 .

任何想法都是我能做的?也许我对此的思考方式不正确?请记住,0和1只是为了保持这一点,所以添加一个总和无济于事!

这是我的代码:

a = 0; 
b = 0; 
c = 0; 
d = 1; 

if a ~=0 || b ~=0 || c ~=0 || d ~=0
    if ~(a~=0 || b~=0 && c~=0 || d~=0 ) 
       works = 1;
    else
       no = 1;
    end
end

谢谢你的阅读!

2 回答

  • 1

    如果您希望代码更具可读性,可以使用方法来执行逻辑,最简单的方法就是转换逻辑 .

    public static boolean isParamFilled(boolean a, boolean b, boolean c, boolean d) {
        if ((a || b) && (c || d)) return true;
        if (c && d) return true;
        int ia = a ? 1 : 0;
        int ib = b ? 1 : 0;
        int ic = c ? 1 : 0;
        int id = d ? 1 : 0;
        // Only one of the 4 parameters is filled.
        if (ia + ib + ic + id == 1) return true;
        if (a && b) return false;
        // default value
        return false;
    }
    
    public static void main(String...args) {
        boolean a = false; 
        boolean b = false; 
        boolean c = false; 
        boolean d = true; 
    
        booledan worked = isParamFilled(a, b, c, d);
    }
    
  • 1

    当问题被标记为MATLAB时,我也会给你一个MATLAB解决方案 . 基本上你添加一个总和的想法只是要走的路,只需先将变量转换为二进制,这是用 logical 完成的 . 因此,可以使用检查失败

    arr = logical([a,b,c,d]);
    fail = sum(logical(arr))==1 || all(arr(1:2))
    

    第一个条件检查已填充的数量,第二个条件检查 ab 是否都已设置 .

    应该注意,有些情况满足通过和失败条件(例如所有变量集) . 上面的解决方案是贪婪的失败 . 通过贪婪的解决方案(正如Cris Luengo在评论中提出的那样)

    arr = logical([a,b,c,d]);
    fail = sum(logical(arr))==1 || all(arr==[1,1,0,0])
    

相关问题