Wszyscy słyszeliśmy o starym problemie Fizz Buzz, ale co się stanie, gdy spróbujesz zastosować go z większą liczbą czynników? Fizz Buzz Crackle Pop!
Wyzwanie
Dodaj pełny program , który zajmuje całkowitą wejście n , a n krotki zawierający całkowitą i łańcuch, a następnie innej liczby całkowitej (> 1) k, w następujący sposób:
n int1 str1 int2 str2 (...) intn strn k
Możesz pobrać tę linię z wiersza poleceń lub STDIN.
Następnie, dla wszystkich liczb całkowitych od 1 do k, jeżeli jest podzielna przez żadną z INT1 , int2 ... INTN , wyjście wszystko odpowiada str ów w kolejności wprowadzania, a następnie linią. Jeśli tak nie jest, po prostu wypisz liczbę całkowitą, po której następuje nowa linia.
Na przykład z wejściem
3 2 Fizz 3 Buzz 5 Crackle 10
dostajemy
1
Fizz
Buzz
Fizz
Crackle
FizzBuzz
7
Fizz
Buzz
FizzCrackle
Ale z wejściem (zauważ zmianę zamówienia)
3 3 Buzz 2 Fizz 5 Crackle 10
dostajemy
1
Fizz
Buzz
Fizz
Crackle
BuzzFizz
7
Fizz
Buzz
FizzCrackle
Opcjonalny znak nowej linii jest dopuszczalny.
Najkrótszy kod w bajtach wygrywa.
Edycje:
Oczywiście przepraszam bardzo.
- Wejścia z
konsoli i STDIN, wszystko inne dostaje +5 bajtów (: c) wdowolnym miejscu - Proszę o pełne programy.
- Załóżmy, że ciągi są niepuste
- Brak gwarancji wyjątkowości int
Przykładowy program C ++ (ograniczony do 20, ponieważ jestem leniwy):
#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.