9

次の「while」ループを書き込もうとしています。

int x = N-1, y = 0;

while ( y < M ) {

    /* Some work */

    if ( x > 0 )
        x--;
    else 
        y++;

}

'for'ループとして。これは私の失敗した試みでした:

for ( int x = N-1, y = 0 ; y < M ; ((x>0)?x--:y++) ) {
    /* Some work */
}

コンパイラが言うように、更新ルールはステートメントではないため、これはコンパイルに失敗します。

上記の「while」ループを「for」ループとして自然に記述する方法はありますか?

4

3 に答える 3

14

更新ルールはいつでも空のままにしておくことができます

for ( int x = N-1, y = 0 ; y < M ; ) {

 if ( x > 0 )
        x--;
    else 
        y++;

}
于 2012-12-19T14:46:41.900 に答える
13

条件を組み合わせる。

 for(int x = N-1, y = 0; y < M ; y += (x > 0)?0:1, x += (x > 0)?-1:0)

これは実際には、共通のメソッドを呼び出す2つのループである必要があると思います。

 for(int x = N - 1; x >= 0; x--)
     someMethod(x, 0);
 for(int y = 0; y < M; y++)
     someMethod(0, y);
于 2012-12-19T14:49:53.310 に答える
1

しますか

/* Some work */

変数xとyを含めますか?そうでない場合は、ループのロジックを作成する簡単な方法があります。現在、ループはN-1からゼロ(x)までカウントされ、次にゼロからM-1(y)までカウントされます。ループ全体が(M + N)-1回実行されます。

初期条件を組み合わせることで、次のように書くことができます。

for (int x = 1; x < M+N; x++) {
    /* Some work */
}

y変数を完全に廃止します。

x変数とy変数をこれらの値として保持する必要がある場合は、3番目の変数を使用してください。

for (int z = 1; z < M+N; z++) {
    /* Some work */
    (x>0)?x--:y++;
}

お役に立てれば!

ジャック

于 2012-12-19T14:58:28.973 に答える