首页 > 解决方案 > 以螺旋方式打印矩阵的程序。(不能正常工作)

问题描述

我需要编写一个以螺旋方式显示矩阵元素的程序。我的程序不能正常工作。这是代码:

#include <iostream>
using namespace std;

void citireMatrice(int a[100][100], int n) // function to read a matrix
{
    int i, j;
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
        {
            cout<<"a[" << i << "][" << j << "]=";
            cin >> a[i][j];
        }
    }
}

void spiral(int a[100][100], int n)
{
    int i, j, k;
    if (n % 2==0)
    {
        k = n / 2;
    }
    else
    {
        k = n / 2 + 1;
    }
    for (i = 1; i <= k; ++i)
    {
        for (j = 1; j <= n - i + 1; ++j)
        {
            cout << a[i][j] << " ";
        }
        for (j = i + 1; j <= n - i + 1; ++j)
        {
            cout << a[j][n - i + 1] << " ";
        }
        for (j = n-i; j >= i; j--)
        {
            cout << a[n - i + 1][j] << " ";
        }
        for (j = n-1;j>=i+1;j--)
        {
            cout << a[j][i];
        }
    }
}

int main()
{
    int a[100][100];
    int n;
    cout << "n=";
    cin >> n;
    citireMatrice(a, n);
    spiral(a, n);
    return 0;
}

如果我使用元素 1、2、3、4 输入 n=2,它会显示 4 -858993460 和其他类似的数字。我的错误在哪里?

标签: c++matrixdata-structures

解决方案


您正确地使用了基于零的数组索引,citireMatricespiral您使用的是基于一的索引。

您需要在 开始循环0并在 结束< n。(考虑a将首先打印出的元素。)


推荐阅读