我遇到这种情况,我需要让用户根据给定条件的数量来定义决策。例如,鉴于有两个条件(IsMale和IsSmoker),我的程序需要自动生成如下的矩阵:
IsMale: YES YES NO NO IsSmoker: YES NO YES NO
而且决策是由用户定义的,因此以下任何一项都可以有效:
IsMale: YES YES NO NO IsSmoker: YES NO YES NO Decision: T F T F IsMale: YES YES NO NO IsSmoker: YES NO YES NO Decision: F F F F IsMale: YES YES NO NO IsSmoker: YES NO YES NO Decision: T T T T
对于每个条件,只能有两种状态, True 和 False 。因此,组合的总数计算如下:
没有可能的 状态(S) 达到 条件(C) 的幂的幂 S ^ C =组合总数
4种可能性(2 ^ 2 = 4)
Condition A T T F F Condition B T F T F
8种可能性(2 ^ 3 = 8)
Condition A T T T T F F F F Condition B T T F F T F T F Condition C T F T F T T F F
希望我能比原来的问题更好地解释自己。
更新: 根据古法给出的。以下是他的算法的人工计算,以生成不同的组合。
4 possibilities (2^2=4)
索引= 0,(右移0)
binary 8 4 2 1 Value original 0 0 0 1 1 & 1 0 0 0 1 1 T original 0 0 1 0 2 & 1 0 0 0 1 0 F original 0 0 1 1 3 & 1 0 0 0 1 1 T original 0 1 0 0 4 & 1 0 0 0 1 0 F
索引= 1,(右移1)
binary 8 4 2 1 Value original 0 0 0 1 1 shift 0 0 0 0 0 & 1 0 0 0 1 0 F original 0 0 1 0 2 shift 0 0 0 1 1 & 1 0 0 0 1 1 T original 0 0 1 1 3 shift 0 0 0 1 1 & 1 0 0 0 1 1 T original 0 1 0 0 4 shift 0 0 1 0 2 & 1 0 0 0 1 0 F
组合:
Condition 1: TFTF Condition 2: FTTF
输出矩阵相当简单:
int conditions = 3; for (int c = 0; c < conditions; c++) { Console.WriteLine( "Condition {0} : {1}", (char)('A' + c), new String( Enumerable.Range(0, (1 << conditions)) .Select(n => "TF"[(n >> c) & 1]) .ToArray() ) ); }
那么,您要如何处理呢?