处理二维数组的问题
Issues manipulating a 2d Array
我必须获取存储在一维数组中的变量,并使用 for 循环将它们放入二维数组中。然后我需要将二维数组的第 0 - 9 行初始化为形成一维数组的元素,所有这些都将在一个函数中完成。我的问题如下。
我可以更有效地将数组 gamma 中的变量存储到数组 inStock 中吗?
如果可能的话,我怎样才能将所有行初始化成这样。
11
13
15
17
11
13
15
17
11
13
初始化第 0 - 9 行后,我需要遍历数组中的剩余元素并将它们初始化为前一个元素的三次方
示例:
11 ^ 3 = 1331 , 1331 ^ 3 = 2357947691 等等。
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
const int COLUMNS = 4;
const int ROWS = 10;
void copyGama(int tempGamma[], int gamma_size, int tempArray2[][COLUMNS]);
int main()
{
int gamma[4] = { 11, 13, 15, 17 },
inStock[ROWS][COLUMNS],
Gamma_Size = 4;
void copyGama(gamma, Gamma_Size, inStock);
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLUMNS; j++)
{
cout << setw(15) << inStock[i][j];
}
cout << "\n";
}
return 0;
}
void copyGama(int tempGamma[], int gamma_size, int tempArray2[][COLUMNS])
{
int copyArray[4];
for (int i = 0; i < gamma_size; i++)
{
copyArray[i] = tempGamma[i];
/* This loops coppies all elements in tempGamma[] and puts them
in copyArray[]
*/
}
for (int i = 0; i < ROWS - 5 ; i++)
{
for (int j = 0; j < COLUMNS - 3; j++)
{
tempArray2[i][j] = copyArray[i];
/* This loop is where inStock[][] is initialized
*/
}
}
for (int i = 4; i < ROWS; i++)
{
for (int j = 0; j < COLUMNS; j++)
{
tempArray2[i][j] = static_cast<double>(pow(tempArray2[i][j], 3));
/*
This is where I attempt to initialize the remaining
elements to the third power of the previous element
*/
}
}
}
当上面的代码 if 运行 输出看起来像这样
11 -858993460 -858993460 -858993460
13 -858993460 -858993460 -858993460
15 -858993460 -858993460 -858993460
17 -858993460 -858993460 -858993460
-2147483648 -2147483648 -2147483648 -2147483648
-2147483648 -2147483648 -2147483648 -2147483648
-2147483648 -2147483648 -2147483648 -2147483648
-2147483648 -2147483648 -2147483648 -2147483648
-2147483648 -2147483648 -2147483648 -2147483648
-2147483648 -2147483648 -2147483648 -2147483648
我理解为什么前四行右侧的列看起来像这样,这是因为它们在每个循环中都被跳过,我也需要修复。
我真正不明白的是如何初始化第 0 - 9 行,因为即使我分别删除 - 5 或 -3 它仍然不起作用
编辑:清除了复制粘贴中的一些错误
编辑:在循环中添加注释以明确它们的用途
源有 4 个元素,而目标有 4 个以上的元素。您可以使用 %
mod 运算符在源元素之间旋转:
//Pseudo code:
dst[0]=src[0];
dst[1]=src[1];
dst[2]=src[2];
dst[3]=src[3];
dst[4]=src[0];
dst[5]=src[1];
...
例如
void copyGama(int tempGamma[], int gamma_size, int tempArray2[][COLUMNS])
{
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLUMNS; j++)
{
int c = i % gamma_size;
tempArray2[i][j] = tempGamma[c];
}
}
/* un-comment this section later
for (int i = 4; i < ROWS; i++)
{
for (int j = 0; j < COLUMNS; j++)
{
tempArray2[i][j] = static_cast<double>(pow(tempArray2[i][j], 3));
}
}
*/
}
我必须获取存储在一维数组中的变量,并使用 for 循环将它们放入二维数组中。然后我需要将二维数组的第 0 - 9 行初始化为形成一维数组的元素,所有这些都将在一个函数中完成。我的问题如下。
我可以更有效地将数组 gamma 中的变量存储到数组 inStock 中吗?
如果可能的话,我怎样才能将所有行初始化成这样。
11
13
15
17
11
13
15
17
11
13
初始化第 0 - 9 行后,我需要遍历数组中的剩余元素并将它们初始化为前一个元素的三次方
示例:
11 ^ 3 = 1331 , 1331 ^ 3 = 2357947691 等等。
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
const int COLUMNS = 4;
const int ROWS = 10;
void copyGama(int tempGamma[], int gamma_size, int tempArray2[][COLUMNS]);
int main()
{
int gamma[4] = { 11, 13, 15, 17 },
inStock[ROWS][COLUMNS],
Gamma_Size = 4;
void copyGama(gamma, Gamma_Size, inStock);
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLUMNS; j++)
{
cout << setw(15) << inStock[i][j];
}
cout << "\n";
}
return 0;
}
void copyGama(int tempGamma[], int gamma_size, int tempArray2[][COLUMNS])
{
int copyArray[4];
for (int i = 0; i < gamma_size; i++)
{
copyArray[i] = tempGamma[i];
/* This loops coppies all elements in tempGamma[] and puts them
in copyArray[]
*/
}
for (int i = 0; i < ROWS - 5 ; i++)
{
for (int j = 0; j < COLUMNS - 3; j++)
{
tempArray2[i][j] = copyArray[i];
/* This loop is where inStock[][] is initialized
*/
}
}
for (int i = 4; i < ROWS; i++)
{
for (int j = 0; j < COLUMNS; j++)
{
tempArray2[i][j] = static_cast<double>(pow(tempArray2[i][j], 3));
/*
This is where I attempt to initialize the remaining
elements to the third power of the previous element
*/
}
}
}
当上面的代码 if 运行 输出看起来像这样
11 -858993460 -858993460 -858993460
13 -858993460 -858993460 -858993460
15 -858993460 -858993460 -858993460
17 -858993460 -858993460 -858993460
-2147483648 -2147483648 -2147483648 -2147483648
-2147483648 -2147483648 -2147483648 -2147483648
-2147483648 -2147483648 -2147483648 -2147483648
-2147483648 -2147483648 -2147483648 -2147483648
-2147483648 -2147483648 -2147483648 -2147483648
-2147483648 -2147483648 -2147483648 -2147483648
我理解为什么前四行右侧的列看起来像这样,这是因为它们在每个循环中都被跳过,我也需要修复。
我真正不明白的是如何初始化第 0 - 9 行,因为即使我分别删除 - 5 或 -3 它仍然不起作用
编辑:清除了复制粘贴中的一些错误
编辑:在循环中添加注释以明确它们的用途
源有 4 个元素,而目标有 4 个以上的元素。您可以使用 %
mod 运算符在源元素之间旋转:
//Pseudo code:
dst[0]=src[0];
dst[1]=src[1];
dst[2]=src[2];
dst[3]=src[3];
dst[4]=src[0];
dst[5]=src[1];
...
例如
void copyGama(int tempGamma[], int gamma_size, int tempArray2[][COLUMNS])
{
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLUMNS; j++)
{
int c = i % gamma_size;
tempArray2[i][j] = tempGamma[c];
}
}
/* un-comment this section later
for (int i = 4; i < ROWS; i++)
{
for (int j = 0; j < COLUMNS; j++)
{
tempArray2[i][j] = static_cast<double>(pow(tempArray2[i][j], 3));
}
}
*/
}