Ми всі чули про проблему «Fizz Buzz», але що відбувається, коли ви намагаєтесь застосувати її з більшою кількістю факторів? Fizz Buzz Crackle Pop!
Змагання
Напишіть повну програму, яка приймає ціле введення n , потім n кортежів, що містять ціле число та рядок, потім інше ціле число (> 1) k, як таке:
n int1 str1 int2 str2 (...) intn strn k
Ви можете взяти цей рядок з будь-якого командного рядка або STDIN.
Тоді для всіх цілих чисел від 1 до k, якщо це розділяється на будь-який з int1 , int2 ... intn , виведіть усі відповідні str s у порядку введення, а потім новий рядок. Якщо це не так, просто виведіть ціле число, а потім новий рядок.
Наприклад, із введенням
3 2 Fizz 3 Buzz 5 Crackle 10
ми отримуємо
1
Fizz
Buzz
Fizz
Crackle
FizzBuzz
7
Fizz
Buzz
FizzCrackle
Але з введенням (помітьте зміну порядку)
3 3 Buzz 2 Fizz 5 Crackle 10
ми отримуємо
1
Fizz
Buzz
Fizz
Crackle
BuzzFizz
7
Fizz
Buzz
FizzCrackle
Необов'язковий затримка нового рядка є прийнятною.
Виграє найкоротший код у байтах.
Зміни:
Очевидно, я багато чого пропустив, вибачте.
- Входи з
консолі та STDIN, будь-що інше отримує +5 байт (: c) вбудь-якому місці - Повні програми, будь ласка.
- Припустимо непусті рядки для строків
- Немає гарантій на унікальність інт
Зразок програми C ++ (обмежений на 20, бо я лінивий):
#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.