Chúng ta đều đã nghe về vấn đề Fizz Buzz của ol, nhưng điều gì xảy ra khi bạn cố gắng áp dụng nó với nhiều yếu tố hơn? Fizz Buzz Crackle Pop!
Các thách thức
Viết một chương trình đầy đủ có một đầu vào số nguyên n , sau đó n bộ chứa một số nguyên và một chuỗi, sau đó một số nguyên khác (> 1) k, như sau:
n int1 str1 int2 str2 (...) intn strn k
Bạn có thể lấy dòng này từ dòng lệnh hoặc STDIN.
Sau đó, với tất cả các số nguyên từ 1 đến k, nếu nó chia hết cho bất kỳ int1 , int2 ... intn nào , hãy xuất tất cả các str tương ứng theo thứ tự đầu vào, theo sau là một dòng mới. Nếu không, thì chỉ cần xuất số nguyên, theo sau là một dòng mới.
Ví dụ: với đầu vào
3 2 Fizz 3 Buzz 5 Crackle 10
chúng tôi nhận được
1
Fizz
Buzz
Fizz
Crackle
FizzBuzz
7
Fizz
Buzz
FizzCrackle
Nhưng với đầu vào (chú ý thay đổi thứ tự)
3 3 Buzz 2 Fizz 5 Crackle 10
chúng tôi nhận được
1
Fizz
Buzz
Fizz
Crackle
BuzzFizz
7
Fizz
Buzz
FizzCrackle
Dòng mới tùy chọn là chấp nhận được.
Mã ngắn nhất trong byte thắng.
Chỉnh sửa:
Rõ ràng là tôi đã bỏ lỡ rất nhiều, xin lỗi.
- Đầu vào từ
bàn điều khiển và STDIN, bất cứ thứ gì khác nhận được +5 byte (: c) ởbất cứ đâu - Chương trình đầy đủ xin vui lòng.
- Giả sử các chuỗi không trống cho strs
- Không đảm bảo cho tính duy nhất của ints
Chương trình mẫu C ++ (giới hạn ở mức 20 vì tôi lười biếng):
#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.