2

我试图让它以螺旋顺序通过阵列。当它找到 2 时,它应该用 0 替换它,并且螺旋顺序中的下一个数字应该变成 2。所以,如果我的数组是

000
200
000

应该成为

000
020
000

变量 ok 告诉我是否找到了数字 2 并简单地将下一个数字修改为 2。请注意,它不会循环遍历它。当它到达阵列的中心时,它会停止并且不会后退或重新开始。

任何想法为什么它不起作用?它根本不会修改我的数组。

#include<iostream>
using namespace std;

#define ROWS 3
#define COLS 3

int main()
{
    int arr[ROWS][COLS] = {{2,0,0},
                           {0,0,0},
                           {0,0,0}};


    // Four direction counters of current movement
    // Horizontal right, vertical bottom, horizontal left and vertical top respectively
    int hr, vb, hl, vt, ok=0;

    // levl indicates current depth of our imaginary rectangle into array. Starting value is zero
    // since we are looping on the boundaries and ending value is the inner most rectangle

    int levl;
    for (levl=0; levl < COLS - levl; levl++)
    {
        for(hr=levl; hr < COLS-levl; hr++)   // go right
        {
            if (ok==1)
            {
                arr[levl][hr] == 2;
                ok = 2;
            }

            if ( (arr[levl][hr] == 2) && (ok == 0) )
            {
                arr[levl][hr] == 0;
                ok = 1;
            }

        }

        for(vb=levl+1; vb < COLS-levl; vb++) // go down
        {
            if (ok == 1)
            {
                arr[vb][hr-1] == 2;
                ok = 2;
            }

            if ( (arr[vb][hr-1] == 2) && (ok == 0) )
            {
                arr[vb][hr-1] == 0;
                ok = 1;
            }

        }

        for(hl=vb-1; hl-1 >= levl; hl--)  // go left
        {
            if ( ok == 1)
            {
                arr[vb-1][hl-1] == 2;
                ok = 2;
            }

            if ( (arr[vb-1][hl-1] == 2) && (ok == 0) )
            {
                arr[vb-1][hl-1] == 0;
                ok = 1;
            }


        }

        for(vt=vb-1; vt-1 > levl; vt--)  // go up
        {
            if (ok == 1)
            {
                arr[vt-1][hl] == 2;
                ok = 2;
            }

            if ( (arr[vt-1][hl] == 2) && (ok==0) )
            {
                arr[vt-1][hl] == 0;
                ok = 1;
            }


        }

    }

    cout << endl;
    for(int t = 0;t < 3;t++)
    {

        for(int u = 0;u < 3;u++)
            cout<<arr[t][u]<<" ";

        cout<<endl;
    }

    int a;
    cin>>a;

    return 0;
}
4

1 回答 1

4

您的数组没有被修改的原因是因为您使用的是“==”而不是“=”。所以

if ((arr[levl][hr] == 2)&&(ok==0))
{
    arr[levl][hr] == 0;
    ok=1;
}

应该

if ((arr[levl][hr] == 2)&&(ok==0))
{
    arr[levl][hr] = 0;
    ok=1;
}

== 是一个比较运算符,= 赋值。非常仔细地检查您的代码并使其更具可读性,因为您可以发现这样的简单错误:)。

于 2013-11-12T17:54:48.450 回答