最も簡単なアプローチは、それらすべてを試すことです。6つの数値があります。つまり、演算子を配置できる場所は最大5つで、6!
順列は最大です。オペレーターが4つしかないことを考えると6!*4^5
、または737280の可能性を検討する必要があります。これは、再帰関数を使用して、またはネストされたループを使用して簡単に実行できます。言語によっては、ライブラリ関数を使用して順列を処理できます。
言語に依存しない再帰的アプローチでは、次の3つの関数を定義する必要があります。
int calc(int nums[6], int ops[5], int countNums) {
// Calculate the results for a given sequence of numbers
// with the specified operators.
// nums are your numbers; only countNums need to be used
// ops are your operators; only countNums-1 need to be used
// countNums is the number of items to use; it must be from 1 to 6
}
void permutations(int nums[6], int perm[6], int pos) {
// Produces all permutations of the original numbers
// nums are the original numbers
// perm, 0 through pos, is the indexes of nums used in the permutation so far
// pos, is the number of perm items filled so far
}
void solveRecursive(int numPerm[6], int permLen, int ops[5], int pos) {
// Tries all combinations of operations on the given permutation.
// numPermis the permutation of the original numbers
// permLen is the number of items used in the permutation
// ops 0 through pos are operators to be placed between elements
// of the permutation
// pos is the number of operators provided so far.
}