Todos nós já ouvimos falar do antigo problema do Fizz Buzz, mas o que acontece quando você tenta aplicá-lo com mais fatores? Fizz Buzz Crackle Pop!
O desafio
Escreva um programa completo que use uma entrada inteira n , depois n tuplas contendo um número inteiro e uma sequência de caracteres e, em seguida, outro número inteiro (> 1) k, como tal:
n int1 str1 int2 str2 (...) intn strn k
Você pode pegar essa linha na linha de comando ou no STDIN.
Então, para todos os números inteiros 1 a k, se é divisível por qualquer um dos int1 , int2 ... intn , imprima todos os str s correspondentes na ordem de entrada, seguidos por uma nova linha. Se não estiver, basta gerar o número inteiro, seguido por uma nova linha.
Por exemplo, com entrada
3 2 Fizz 3 Buzz 5 Crackle 10
Nós temos
1
Fizz
Buzz
Fizz
Crackle
FizzBuzz
7
Fizz
Buzz
FizzCrackle
Mas com entrada (observe a alteração na ordem)
3 3 Buzz 2 Fizz 5 Crackle 10
Nós temos
1
Fizz
Buzz
Fizz
Crackle
BuzzFizz
7
Fizz
Buzz
FizzCrackle
A nova linha à direita opcional é aceitável.
O código mais curto em bytes vence.
Editar% s:
Obviamente, perdi muito, desculpe.
- Entradas do
console e do STDIN, qualquer outra coisa recebe +5 bytes (: c) emqualquer lugar - Programas completos, por favor.
- Assumir strings não vazias para strs
- Nenhuma garantia para exclusividade de ints
Exemplo de programa C ++ (limitado a 20 porque sou preguiçoso):
#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.