Ho provato a risolvere il problema di seguito per una sfida di codifica ma non sono riuscito a terminarlo in 1 ora. Ho un'idea su come funziona l'algoritmo ma non sono abbastanza sicuro su come implementarlo al meglio. Ho il mio codice e il problema qui sotto.Genera tutte le combinazioni di espressioni matematiche che si aggiungono alla destinazione (compiti/interviste Java)
I primi 12 cifre di pi sono 314159265358. Possiamo fare queste cifre in una valutazione di espressione per 27182 (prime 5 cifre e) come segue:
3141 * 5/9 * 26/5 * 3 - 5 * 8 = 27182
o
3 + 1 - 415 * 92 + 65358 = 27182
Si noti che l'ordine delle cifre di input non è cambiato. Gli operatori (+, -, /, o *) sono semplicemente inseriti per creare l'espressione.
Scrivere una funzione di prendere una lista di numeri e un obiettivo, e restituire tutti i modi che questi numeri possono essere formate in espressioni che valutano al bersaglio
Ad esempio:
f ("314.159.265.358", 27182) deve stampare:3 + 1 - 415 * 92 + 65358 = 27182 3 * 1 + 4 * 159 + 26535 + 8 = 27182 3/1 + 4 * 159 + 26535 + 8 = 27182 3 * 14 * 15 + 9 + 26535 + 8 = 27182 3141 * 5/9 * 26/5 * 3 - 5 * 8 = 27182
Questo problema è difficile dal momento che si può avere qualsiasi combinazione di numeri e non prendere in considerazione un numero alla volta. Non ero sicuro di come fare le combinazioni e la ricorsione per quel passo. Si noti che le parentesi non vengono fornite nella soluzione, tuttavia viene mantenuto l'ordine delle operazioni.
Il mio obiettivo è quello di iniziare con dicono
{"3"}
then
{"31", "3+1", "3-1", "3*1" "3/1"}
then
{"314", "31+4", "3+1+4", "3-1-4", "31/4", "31*4", "31-4"} etc.
poi un'occhiata alla ogni valore nella lista ogni volta e vedere se è valore di destinazione. Se lo è, aggiungi quella stringa all'elenco dei risultati.
Ecco il mio codice
public static List<String> combinations(String nums, int target)
{
List<String> tempResultList = new ArrayList<String>();
List<String> realResultList = new ArrayList<String>();
String originalNum = Character.toString(nums.charAt(0));
for (int i = 0; i < nums.length(); i++)
{
if (i > 0)
{
originalNum += nums.charAt(i); //start off with a new number to decompose
}
tempResultList.add(originalNum);
char[] originalNumCharArray = originalNum.toCharArray();
for (int j = 0; j < originalNumCharArray.length; j++)
{
//go through every character to find the combinations?
// maybe recursion here instead of iterative would be easier...
}
for (String s : tempResultList)
{
//try to evaluate
int temp = 0;
if (s.contains("*") || s.contains("/") || s.contains("+") || s.contains("-"))
{
//evaluate expression
} else {
//just a number
}
if (temp == target)
{
realResultList.add(s);
}
}
tempResultList.clear();
}
return realResultList;
}
Potrebbe qualcuno aiutare con questo problema? Alla ricerca di una risposta con codifica in esso, dal momento che ho bisogno di aiuto con la generazione di possibilità
dal momento che per ogni cifra si moltiplica il numero di espressioni di valutare da 5, significa che dopo 12 cifre, è' ll potenziometro 244140625 soluzioni. E mentre quel numero non è follemente grande, probabilmente non è quello che gli intervistatori stavano cercando. – biziclop
Ho copiato e incollato la domanda esatta. È stato specificamente scritto/implementato per eliminare i candidati, quindi è difficile ovviamente. – John61590
La domanda va bene, quello che ho cercato di dire è che probabilmente cercavano una risposta migliore di quella bruta-forzandola. – biziclop