在将下面给出的坐标周围的多维数组的值相加时,我遇到了一些困难。我的逻辑与索引位置有问题。任何想法都会非常有用,如果需要更多信息,请不要犹豫,问我。
#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;
}
答案 0 :(得分:1)
您的问题可能是您使用行/列-2和行/列+2作为相邻方向,这是不正确的。如果(row-1,col-1)是你当前的单元格,那么你想要的是row / col -2和row / col +0。
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;
然而,这可以通过编程方式完成:
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 :(得分:1)
因此,如果我正确理解这一点,用户输入一个行号和列号,它对应于displayArray[row-1][column-1]
因此,该单元格周围的坐标应为。
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]
答案 2 :(得分:0)
您的错误在于将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处理。