Wir haben alle von dem alten Fizz Buzz-Problem gehört, aber was passiert, wenn Sie versuchen, es mit mehr Faktoren anzuwenden? Fizz Buzz Crackle Pop!
Die Herausforderung
Schreiben Sie ein vollständiges Programm , das eine Ganzzahl- Eingabe n , dann n Tupel mit einer Ganzzahl und einer Zeichenfolge und dann eine weitere Ganzzahl (> 1) k als solche verwendet:
n int1 str1 int2 str2 (...) intn strn k
Sie können diese Zeile entweder über die Befehlszeile oder über STDIN übernehmen.
Dann wird für alle ganzen Zahlen 1 bis k, wenn es von einem teilbaren INT1 , INT2 ... INTn , all entsprechenden Ausgang str s in der Eingabereihenfolge, gefolgt von einem Zeilenvorschub. Wenn dies nicht der Fall ist, geben Sie einfach die Ganzzahl gefolgt von einer neuen Zeile aus.
Zum Beispiel mit Eingabe
3 2 Fizz 3 Buzz 5 Crackle 10
wir bekommen
1
Fizz
Buzz
Fizz
Crackle
FizzBuzz
7
Fizz
Buzz
FizzCrackle
Aber mit Eingabe (beachten Sie die Auftragsänderung)
3 3 Buzz 2 Fizz 5 Crackle 10
wir bekommen
1
Fizz
Buzz
Fizz
Crackle
BuzzFizz
7
Fizz
Buzz
FizzCrackle
Optionaler nachfolgender Zeilenumbruch ist zulässig.
Der kürzeste Code in Bytes gewinnt.
Bearbeitungen:
Offensichtlich habe ich viel verpasst, sorry.
- Eingaben von der
Konsole und STDIN, alles andere erhältüberall+5 Bytes (: c) - Vollständige Programme bitte.
- Nehmen Sie nicht leere Zeichenfolgen für strs an
- Keine Garantie für die Eindeutigkeit von Ints
Beispiel für ein C ++ - Programm (auf 20 begrenzt, weil ich faul bin):
#include <iostream>
#include <string>
using namespace std;
int main() {
string names[20];
int mods[20], n, max;
cin >> max >> n;
for (int i=0; i<n; i++) {
cin >> mods[i] >> names[i];
}
for (int i=1; i<=max; i++) {
bool found = false;
for (int j=0; j<n; j++) {
if (i % mods[j] == 0) {
found = true;
cout << names[j];
}
}
if (!found)
cout << i;
cout << endl;
}
return 0;
}
Generalized Fizz Buzz.