ノーチェックはどうですか?
string[] output = { "fizzbuzz", "", "", "fizz", "", "buzz", "fizz", "", "", "fizz", "buzz", "", "fizz", "", "" };
print("%s", output[x % 15]);
もちろん、これはこのコードif
からステートメントを削除するだけであることに注意してください。基になるコードには、1 つまたは 2 つのジャンプ命令が含まれている可能性があります。
何が起こっているのかをもう少し明確にしたい場合は、2 つの配列を作成できます。
string[] fizz = { "fizz", "", "" };
string[] buzz = { "buzz", "", "", "", "" };
print("%s%s", fizz[x % 3], buzz[x % 5]);
これらの実装はどちらも負の数を処理しないことに注意してください。これを行うバージョンは次のとおりです。
string[] fizz = { "fizz", "", "" };
string[] buzz = { "buzz", "", "", "", "" };
print("%s%s", fizz[((x % 3) + 3) % 3], buzz[((x % 5) + 5) % 5]);
コードに追加した改行をきれいにスキップしたことに注意してください。それが必要な場合は、上記のコードを同じ方法で変更して追加する方法を理解できると確信しています:)
さらに重要なこと:これは実際には「公式の」フィズバズテストに合格しないことに注意してください。質問に答えるだけです。
fizzbuzz テストは次のとおりです。
- 1 から 100 までのすべての数字を書き出します。ただし、3 の倍数の数字は数字の代わりに「fizz」と書き、5 の倍数の数字は数字の代わりに「buzz」と書きます。数字が 3 と 5 の両方の倍数である場合は、数字の代わりに「fizzbuzz」と書きます。
あなたの質問は「数字の代わりに」の部分をまったく処理しなかったので、私の答えも処理しませんでした。
では、ループには通常「チェック」が伴うという事実をスキップすると、if ステートメントなしで fizzbuzz テスト全体を記述できるでしょうか?
ちょっとした魔法で、はい、できます。これが C# コードのループです。LINQPadまたはIdeoneを使用してこれを確認できます。
void Main()
{
string[] fizzbuzz = new[]
{
"fizzbuzz", "{0}", "{0}", "fizz", "{0}", "buzz", "fizz",
"{0}", "{0}", "fizz", "buzz", "{0}", "fizz", "{0}", "{0}"
};
for (int index = 1; index <= 100; index++)
{
Debug.WriteLine(string.Format(fizzbuzz[index % 15], index));
}
}
string.Format
ここでは、実際には、に送信される書式文字列に引数への参照が含まれている必要がないという事実に依存しています。
編集: コメントに記載されているように、パラメーターで??
を取得し、配列のエントリを に残していましたが、実際には変装した if ステートメントであるため、編集して削除しました。"{0}"
string.Format
null
??