使测验中答案的所有可能组合的算法

时间:2018-10-29 07:35:59

标签: algorithm logic combinations

我有一个性格测验,其中有8个问题,每个问题有4个选项。

用户最终必须选择8个答案(每个问题1个答案),分数将根据所选答案分配给个性。

现在我必须找到所有可能的答案组合,即4(选项)^ 8(问题)= 65536个可能的组合。

如果矩阵格式是这样

q11 q12 q13 q14 
q21 q22 q23 q24
q31 q32 q33 q34
....
q81 q82 q83 q84

我需要一种算法来选择所有可能的答案组合,并找出每种组合的人格分数。

帮帮我。谢谢。

3 个答案:

答案 0 :(得分:0)

您可以尝试这样的操作(python):

ans1 = 1
ans2 = 3
ans3 = 1
ans4 = 2
ans5 = 4
ans6 = 1
ans7 = 2
ans8 = 3

score = ans1 +ans2 +ans3 +ans4 +ans5 +ans6 +ans7 +ans8

if score < 12:
    print("You are personality type 1")

if score >= 12 and score < 24:
    print("You are personality type 2")

...

这是这类测试获得结果的一种常见方式。

编辑 该代码将为您提供所有可能的结果(1-4个问题,共8个问题的答案)。但是,这需要花很多时间才能运行,并且您必须做足够的if语句才能使用它:

import itertools

def permute(LIST):
    length=len(LIST)
    if length <= 1:
        yield LIST
    else:
        for n in range(0,length):
             for end in permute( LIST[:n] + LIST[n+1:] ):
                 yield [ LIST[n] ] + end

for x in permute([1,1,2,2,3,3,4,4]):
    print(x)

答案 1 :(得分:0)

我不知道对于您来说存储此组合q14 q13 q12 q11是否重要,这是创建示例序列的伪代码

int columns=3;
int rows=7;
string matrix[7][4];
for(int i=0; i<rows; i++){
   for(int j=0; j<columns; j++){
      matrix[i][j]="q"+(i+1)+(j+1);
   }
}

答案 2 :(得分:0)

<?php 

$all_option_combinations = getAllOptionCombinations(getAllOptionsData());
printAllCombinations($all_option_combinations);


function printAllCombinations($all_option_combinations){
    foreach($all_option_combinations as $each_combination){
        echo implode(" ",$each_combination).PHP_EOL;
    }
}

function getAllOptionsData(){
    $question_with_options = [];
    for($i = 1;$i < 9; $i++){
        $current_question_options = [];
        $current_question_options[] = 'q'.$i.'1';
        $current_question_options[] = 'q'.$i.'2';
        $current_question_options[] = 'q'.$i.'3';
        $current_question_options[] = 'q'.$i.'4';
        $question_with_options[] = $current_question_options;
    }

    return $question_with_options;
}

function getAllOptionCombinations($options_data){
    $current_combinations = array_map("returnAsArray",$options_data[0]);
    $options_size = count($options_data);

    for($i = 1;$i < $options_size; $i++){
        $next_combinations = [];
        $each_question_options_size = count($options_data[ $i ]);
        $current_combinations_size  = count($current_combinations);
        for($j = 0; $j < $current_combinations_size; $j++){
            for($k = 0; $k < $each_question_options_size; $k++){
                $combination = $current_combinations[ $j ];
                $combination[] = $options_data[ $i ][ $k ];
                $next_combinations[] = $combination;
            }          
        }
        $current_combinations = $next_combinations;
    }

    return $current_combinations;
}

function returnAsArray($each_value){
    return array($each_value);
}

输出:

q11 q21 q31 q41 q51 q61 q71 q81
q11 q21 q31 q41 q51 q61 q71 q82
q11 q21 q31 q41 q51 q61 q71 q83
q11 q21 q31 q41 q51 q61 q71 q84
q11 q21 q31 q41 q51 q61 q72 q81
q11 q21 q31 q41 q51 q61 q72 q82
q11 q21 q31 q41 q51 q61 q72 q83
q11 q21 q31 q41 q51 q61 q72 q84
q11 q21 q31 q41 q51 q61 q73 q81
q11 q21 q31 q41 q51 q61 q73 q82
q11 q21 q31 q41 q51 q61 q73 q83
q11 q21 q31 q41 q51 q61 q73 q84
q11 q21 q31 q41 q51 q61 q74 q81
q11 q21 q31 q41 q51 q61 q74 q82
q11 q21 q31 q41 q51 q61 q74 q83
q11 q21 q31 q41 q51 q61 q74 q84
q11 q21 q31 q41 q51 q62 q71 q81
q11 q21 q31 q41 q51 q62 q71 q82
q11 q21 q31 q41 q51 q62 q71 q83
q11 q21 q31 q41 q51 q62 q71 q84
....65516 more lines
  • 由于您没有提到语言,因此我使用了我选择的语言,即 PHP
  • 此代码为您提供了所有必需的组合。
  • 现在,您只需为每个选项分配值并计算每个组合的最终分数即可。您如何做到这一点是一项练习,我留给您(因为您还没有表现出自己的努力)。如果您也为此挣扎,请告诉我。