因此,我尝试采用随机数输入并采用某种格式的10x10数组,然后显示其反转版本(位置[0] [0]现在将为[9] [9],依此类推)依此类推,但是我在应该创建反向数组的部分出现C6385错误(问题部分包裹在\\中)
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
const int ROW = 10;
const int COLUMN = 10;
srand(time(NULL));
int array[ROW][COLUMN] = {};
int transposed[ROW][COLUMN] = {};
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COLUMN; j++)
{
array[i][j] = rand() % 10;
}
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COLUMN; j++)
{
int it = ROW - i;
int jt = COLUMN - j;
transposed[i][j] = array[it][jt];
}
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
cout << " ORIGINAL" << endl;
for (int i = 0; i < ROW; i++)
{
if (i == 0)
{
cout << " 1 2 3 4 5 6 7 8 8 10" << endl;
cout << " +---+---+---+---+---+---+---+---+---+---+" << endl;
}
for (int j = 0; j < COLUMN; j++)
{
if (((j > 0) && (j < 9)) && (i < 10))
{
cout << " | " << array[i][j];
}
else if (j == 9)
{
cout << " | " << array[i][j] << " |";
}
else if ((j == 0) && (i == 9))
{
cout << i + 1 << " | " << array[i][j];
}
else if ((j == 0) && (i < 9))
{
cout << i+1 << " | " << array[i][j];
}
}
cout << endl;
if (i < 10)
{
cout << " +---+---+---+---+---+---+---+---+---+---+" << endl;
}
}
cout << " Transposed" << endl;
for (int i = 0; i < ROW; i++)
{
if (i == 0)
{
cout << " 1 2 3 4 5 6 7 8 8 10" << endl;
cout << " +---+---+---+---+---+---+---+---+---+---+" << endl;
}
for (int j = 0; j < COLUMN; j++)
{
if (((j > 0) && (j < 9)) && (i < 10))
{
cout << " | " << transposed[i][j];
}
else if (j == 9)
{
cout << " | " << transposed[i][j] << " |";
}
else if ((j == 0) && (i == 9))
{
cout << i + 1 << " | " << transposed[i][j];
}
else if ((j == 0) && (i < 9))
{
cout << i + 1 << " | " << transposed[i][j];
}
}
cout << endl;
if (i < 10)
{
cout << " +---+---+---+---+---+---+---+---+---+---+" << endl;
}
}
return (0);
}
答案 0 :(得分:2)
这是有问题的:
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'mysql2' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE_SECOND', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
当 int it = ROW - i;
int jt = COLUMN - j;
为i
时,0
为it
。与10
相同,请记住,jt
映射到[0,0]
,因为数组总是从索引0开始。[9,9]
大小的数组中的最后一个有效元素是N
,不是[N-1]
。
因此,当执行此行时:
N
糟糕。 transposed[i][j] = array[it][jt];
。那不是你想要的。
因此,您需要这样做:
transposed[0][0] = array[10][10]
因此,此时的代码运行良好:
int it = ROW - i - 1;
int jt = COLUMN - j - 1;
答案 1 :(得分:1)
它对我进行了编译,没有错误,但是this之类的值存在问题 我正在使用Clion v3.15和c ++ 14
答案 2 :(得分:1)
除了通过@serbie解决索引问题的答案外,您还可以简化用于反转数组本身的算法-就地还原,而无需第二个数组。使用您当前的算法,您不需要反转数组,而只是用相反的顺序用第一个元素填充第二个数组。如果您尝试实际上就地反转array
,则最终将交换每个元素两次并最终获得与开始时相同的数组。此外,奇数或偶数行将提供不同的结果。
对于带注释的输出,您仍将需要输出具有所需标题和行号的数组,但是对于反转本身,可以将其减少为例如:
#define ROW 3
#define COL ROW
void rev2d (int (*a)[COL])
{
/* loop rows increment from 0 while row < end row decrementing from ROW-1 */
for (int i = 0, j = ROW-1; i <= j; i++, j--) {
/* loop cols 0->COL-1 and COL-1->0 while i != j or col < endcol */
for (int k = 0, l = COL-1; i != j ? k < COL : k < l; k++, l--) {
/* swap element */
int n = a[i][k];
a[i][k] = a[j][l];
a[j][l] = n;
}
}
}
(注意:如果您不使用常量,则可以修改函数以使用row
和col
值)
该算法将适用于row
和col
大于或等于2
的值(您可以添加大小为1x1
的数组的检查,并在以下情况下发出警告,或者只是让事物保持当前状态不变。
行数奇数/偶数的处理是通过内部循环条件中使用的三元数完成的,例如i != j ? k < COL : k < l
将反转整行,除非行数为奇数,然后在i = j
时将其反转为中间元素
它提供了阵列的完整反转,例如:
示例
$ ./bin/revarr2da
original array:
1 2 3
4 5 6
7 8 9
reversed array:
9 8 7
6 5 4
3 2 1
如果您想填充一个单独的数组,您的算法很好,如果您有兴趣交换适当的值,这只是使用
进行处理的另一种方式