古くからあるFizz Buzzの問題を聞いたことはありますが、より多くの要因でそれを適用しようとするとどうなりますか?フィズバズクラックルポップ!
チャレンジ
整数入力n、次に整数と文字列を含むn個のタプル、さらに別の整数(> 1)kを受け取る完全なプログラムを作成します。
n int1 str1 int2 str2 (...) intn strn k
この行は、コマンドラインまたはSTDINから取得できます。
次に、1〜kのすべての整数について、int1、int2 ... intnのいずれかで割り切れる場合、対応するすべてのstrを入力順に出力し、その後に改行を続けます。そうでない場合は、整数を出力し、その後に改行を続けます。
たとえば、入力あり
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)のどこでも - 完全なプログラムをお願いします。
- strに空でない文字列を想定
- intの一意性の保証はありません
サンプル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。