Ich würde gerne sagen, dass dies nicht meine ursprüngliche Idee ist. Ich werde den Verweis unten hinzufügen. Finden Sie den C++ - Code unten. Es könnte dir etwas helfen, so wie es für mich war.
#include <iostream>
#include<string>
using namespace std;
void cntdwn(double sum, double previous, string digits, double target, std::string expr) {
if (digits.length() == 0) {
if (sum + previous == target) {
std::cout<<expr << " = " << target;
}
} else {
for (int i = 1; i <= digits.length(); i++) {
double current = std::stod(digits.substr(0, i));
string remaining = digits.substr(i);
cntdwn(sum + previous, current, remaining, target, expr + " + " + std::to_string(current));
cntdwn(sum, previous * current, remaining, target, expr + " * " + std::to_string(current));
cntdwn(sum, previous/current, remaining, target, expr + "/" + std::to_string(current));
cntdwn(sum + previous, -current, remaining, target, expr + " - " + std::to_string(current));
}
}
}
void f(string digits, double target) {
for (int i = 1; i <= digits.length(); i++) {
string current = digits.substr(0, i);
cntdwn(0, std::stod(current), digits.substr(i), target, current);
}
}
int main() {
// The digits go as concatenated string
f("5373",11);
return 0;
}
Ausgang:
5 * 3.000000 - 7.000000 + 3.000000 = 11
Referenzen:
Generate all combinations of mathematical expressions that add to target (Java homework/interview)
https://math.stackexchange.com/questions/459857/using-operators-and-4-4-4-4-digits-find-all-formulas-that-would-resolve
https://www.careercup.com/question?id=5735906000502784
Zusätzliche Anmerkung
a) This code will not make any combinations for the digits. For example if we give (4,4,4,4) as numbers and 10 as target then it will not give any result as the solution in that case should be [(44-4)/4] {this example has been picked from second reference].
b) And this problem is a classic algorithmic problme popularly known as "Countdown Problem" picked from famous UK game.
Brute-Force ist eine Option, aber Sie können auch die Ergebnisse speichern, um schneller – Thomas
Trotz der Abwärts Stimmen, es sieht aus wie eine interessante Frage sowohl in Bezug auf die Programmierung und Mathe. Sie könnten versuchen, einen Algorithmus zu machen, um dies durch Brute-Force zu lösen, aber Sie haben viel Code, um für die möglichen Lösungen zu schreiben – meJustAndrew
Ich sehe keinen Weg um den Brute-Force-Ansatz. Das ist eine ganz interessante Frage ... unterscheiden sich die Zahlenreihen in der Größe? Das Beispiel zeigt ein Array von 5 Zahlen, aber könnte es mehr oder weniger Zahlen geben? – 7Nate9