-2

我首先为java编写了这段代码。它应该将二维阵列打印为螺旋。我想在 c++ 中尝试它。在 java 中;有一个draw方法。但是 c++ 不接受数组作为返回类型(可以通过指针完成),所以我删除了 draw 方法并复制到 main 方法中。我评论了开始和结束的绘制方法。但现在; 在draw方法之后的for循环(我也评论过)没有开始。有什么问题; 我看不到它...感谢您的帮助。

int T ;
scanf("%d", &T);
int num[T];
for(int i = 0; i < T; i++){
    scanf("%d", &num[i]);
}

for(int m = 0; m < T; m++){
    int n = num[m];
    int a[n][n];


    //draw -start
    int all = n*n;
    int x = 0, y=0;


    for(int counter=1; counter<=all; counter++){

        for(int i = 0; i < n; i++){
            a[x][y] = counter++;
            y++;}
        x++; y--;

        for(int i = 0; i < n-1; i++){
            a[x][y] = counter++;
            x++;}
        x--; y--;

        for(int i = 0; i < n-1; i++){
            a[x][y] = counter++;}
        x--; y++;

        for(int i = 0; i < n-2; i++){
            a[x][y] = counter++;}

        y++; x++; n = n-2;}

    //draw - end
   //this for is not starting
    for(int i = 0; i<n; i++){
        printf("a");
        for(int j = 0; i<n; j++){
            printf("a");
            printf("%d ", a[i][j]);

        }
        printf("\n");

    }
4

2 回答 2

4

n你在最大的循环中递减。

n = n-2;

这就是为什么n当你到达for你所说的 < 0 并且它没有循环。

我几乎可以肯定你不是打算n在这个循环中修改。

于 2013-05-10T18:12:16.023 回答
0

我整理了您的代码并在评论中提供了我的答案。

int T ;
scanf("%d", &T);
int num[T];
for(int i = 0; i < T; i++){
    scanf("%d", &num[i]);
}

for(int m = 0; m < T; m++){
    int n = num[m];
    int a[n][n];


    //draw -start
    int all = n*n;
    int x = 0, y=0;


    for(counter=1; counter<=all; counter++){

        for(int i = 0; i < n; i++) {
            a[x][y] = counter++;
            y++;
        }
        x++; 
        y--;

        for(int i = 0; i < n-1; i++) {
            a[x][y] = counter++;
            x++;
        }
        x--; 
        y--;

        for(int i = 0; i < n-1; i++) {
            a[x][y] = counter++;
        }
        x--; 
        y++;

        for(int i = 0; i < n-2; i++) {
            a[x][y] = counter++;
        }

        y++; 
        x++; 
        n = n-2;  //n = n - 2; all = n * n times?
    }

    for(int i = 0; i<n; i++){
        printf("a");
        for(int j = 0; i<n; j++){
            printf("a");
            printf("%d ", a[i][j]);

        }
        printf("\n");
    }
}

特别看这条线

n = n-2;  //n = n - 2; all = n * n times? 
于 2013-05-10T18:15:43.497 回答