2

私はこれを解決しようとしてきました:

配列があるとします:

int[] n = {0, 0, -1, 1, 0, 1, 1, -1, 1};

配列を並べ替えることができる必要があり、その前にゼロ以外のゼロがある場合は、それらを交換する必要があります。

例えば:0, 0, -1, 1, 0, 1, 1, -1, 1

となります:0, 0, -1, 0, 1, 1, 1, -1, 1

私は運がないforループとステートメントを使用してそれをやろうとしています。if任意のヒント?

4

5 に答える 5

3

これを試して:

for (int i = 1 ; i < n.length ; i++)
    if (n[i] == 0 && n[i - 1] != 0) {
        int tmp = n[i - 1];
        n[i - 1] = n[i];
        n[i] = tmp;
    }

本体にステートメントを含むforループが必要になると考えたのは正しかったです。ifここで行っているのは、要素 1 から始まる配列をループすることだけです。次に、現在の要素が で0 あり、前の要素がそうでないかどうかを確認し0ますif (n[i] == 0 && n[i - 1] != 0)。この条件が true の場合、これら 2 つの要素を交換します。

于 2012-09-29T13:46:33.870 に答える
2
for(int i=0; i < length; i++)
{
    if(i > 0 && arr[i] == 0 && arr[i-1] != 0)
    {
        int temp = arr[i-1];
        arr[i-1] = arr[i];
        arr[i] = temp;
    }
}

動作するはずです。

于 2012-09-29T13:50:38.767 に答える
0

ビットいじりを使用しない場合、2 つのオブジェクトを交換するために一時変数が必要になります。例:

int[] n = {...};
int temp = n[3]; // swaps n[3] and n[4]
n[3] = n[4];
n[4] = temp;

このようなものをループ内に貼り付けて、説明したことを達成できます。

于 2012-09-29T13:47:12.120 に答える