首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >坐标周围的C++数组求和值

坐标周围的C++数组求和值
EN

Stack Overflow用户
提问于 2013-04-16 11:30:37
回答 3查看 1.4K关注 0票数 1

对于下面给出的坐标,我很难对多维数组的值求和。我的索引位置逻辑有问题。任何想法都将是非常有帮助的,如果需要更多的信息,请不要犹豫地问我。

代码语言:javascript
复制
#include <iostream>
#include <ctime>


using namespace std;

int main()
{
srand(time(0));

int displayArray[11][11];

    cout<<"\t\t\t\t\t\t\t\t\t\t\t\t\tColumn\n\n";
    for(int column=1;column<10;column++)
    {
        cout<<"\t "<<column;
    }
    cout<<"\n\n";
    //fill array with random numbers

    for(int i=0;i<9;i++)
    {
        for(int m=0;m<9;m++)
        {
            displayArray[i][m]=rand()%10;
        }
    }

    cout<<"\n\n\n";

    //main data printout

    for(int k=0;k<9;k++)
    {
        cout<<"Row "<<k+1<<"\t ";

    for(int l=0;l<9;l++)
    {
        cout<<displayArray[k][l]<<"\t";
    }
    cout<<endl<<endl;
    }

    cout<<"\n\n";

    int row=0, column=0;
    cout<<"What array cell would you like to see? (Press enter after each entry)\n";
    cout<<"Row = ";
    cin>>row;
    cout<<"Column = ";
    cin>>column;
    cout<<"\nThe number "<<displayArray[row-1][column-1]<<" is in cell "<<row<<","<<column;

    int coord1=displayArray[row-2][column+2],
        coord2=displayArray[row+2][column+2],
        coord3=displayArray[row-2][column-2],
        coord4=displayArray[row-2][column+2],
        coord5=displayArray[row-2][column+2],
        coord6=displayArray[row-2][column+2],
        coord7=displayArray[row-2][column+2],
        coord8=displayArray[row-2][column+2];

    int sum=coord1+coord2+coord3+coord4+coord5+coord6+coord7+coord8;

    cout<<"\n\nThe sum of the cells surrounding "<<row<<","<<column<<" is "<<sum;

    cin.get();
    cin.get();


return 0;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-16 11:36:59

您的问题可能是您使用行/列-2和行/列+2作为相邻方向,这是不正确的。如果(row-1,col-1)是您当前的单元格,那么您想要row/col -2和row/col +0。

代码语言:javascript
复制
int coord1=displayArray[row-2][column-2],
    coord2=displayArray[row-2][column-1],
    coord3=displayArray[row-2][column],
    coord4=displayArray[row-1][column-2],
    coord5=displayArray[row-1][column],
    coord6=displayArray[row][column-2],
    coord7=displayArray[row][column-1],
    coord8=displayArray[row][column];
int sum=coord1+coord2+coord3+coord4+coord5+coord6+coord7+coord8;

然而,这可以通过更多的编程方式来完成:

代码语言:javascript
复制
int sum = 0;
for (int x=row-2; x<=row; x++) {
    for (int y=column-2; y<=column; y++) {
        if ((x != row-1) || (y != column-1)) { //Avoids "center" cell (self)
            sum += displayArray[x][y]
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-04-16 11:39:14

因此,如果我理解正确的话,用户输入一个行号和列号,它对应于位于displayArray[row-1][column-1]中的值

因此,该单元格周围的坐标应该是。

代码语言:javascript
复制
displayArray[row][column]
displayArray[row-1][column]
displayArray[row-2][column]
displayArray[row][column-1]
displayArray[row-2][column-1]
displayArray[row][column-2]
displayArray[row-1][column-2]
displayArray[row-2][column-2]

我不确定你为什么要使用你的坐标,但这是你的问题。

此外,您还需要确保在用户选择数组边界上的单元格时程序不会崩溃。例如:如果您尝试搜索单元格(0,0)周围的坐标,当尝试加载displayArray[-1][-1]的值时,程序将崩溃

票数 1
EN

Stack Overflow用户

发布于 2013-04-16 11:38:19

您的错误在于将基于0的索引转换为基于1的索引。数组是从0开始的。您让他们在以1为基础的行中输入。然后你想把它周围的8个数字相加。如果他们输入以0为基数的数字并输入N,则需要对每行/列的n-1、n和n+1求和。为了处理从0开始的运算,你想做n-2,n-1和n,但是你做的是n-2和n+2,而且你也没有计算正确的行的中间位置。

最佳实践甚至不是像这样做数学运算。它将读取行/列数,然后立即减去1,使其以0为基数,然后根据0处理它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16028274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档