0

1〜9の数字を何度も印刷するプログラムを作成したいとします。

123456789123456789123456789

私はそれを行うための最も明白な方法はループを使用することだと思います

int number = 1;
while(true)
{
    print(number);
    number = number + 1;
    if(number > 9)
        number = 1;
}

先に進む前に、これがこれを行うための最良の方法ですか、それともこれを行うためのより一般的な方法がありますか?

4

5 に答える 5

8

これでいいですか?

while(true)
{
    print("123456789");
}
于 2011-04-24T00:46:41.480 に答える
1

最も明白な方法はこれです:

for (;;)
{
    for (int i = 1; i < 10; ++i)
    {
        print(i);
    }
}

なぜあなたがそれを最適化したいのかは私を超えています。出力は計算を圧倒するため、どのような種類の最適化も関係ありません。

于 2011-04-24T05:23:36.567 に答える
1

まず、なぜこれを「最適化」しようとしているのですか?速度を最適化していますか?スペース?読みやすさまたは保守性?

これを行うための「より短い」方法は次のようになります。

for (int i = 1; true; i++)
{
    print(i);
    i = (i + 1) % 10;
}

私がしたのは:

  1. whileループをforループに変換します
  2. インクリメント+条件付きをインクリメント+mod演算に変換します。

これは実際にはマイクロ最適化の場合です。

于 2011-04-24T00:46:31.880 に答える
1

私の答えはマイクの答えに基づいていますが、さらに最適化されています:

for (int i = 1; true; i++)
{
    std::cout << ('0' + i);
    i = (i + 1) % 10;
}

数値の印刷は、文字と加算の印刷よりもはるかに拡張性があります。

于 2011-04-24T01:09:06.923 に答える
1

これまで演算子を使用している人は皆%、10個の値が関係しているという印象を受けているようです。彼らはまた、彼らの論理が時々生成するという事実を見落としています0。やりたいことをする1つの方法は次のとおりです。

int i = 1;
while (true) {
    print(i);
    i = (i % 9) + 1;
}
于 2011-04-24T18:47:53.273 に答える