重新排列数组的行和列时出现问题
Problem in rearranging rows and columns of an array
通常,给定任务:
允许的矩阵变换是两个相邻行或两个相邻列的排列。给出了n阶(n<=12(的实平方矩阵。使用有效的转换器,可以得到一个矩阵,其中最大元素位于左上角。元素用于执行有效的转换。
我的问题恰恰是我不能交换相邻的行或列。
这是我的代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int rows = 4, cols = rows;
int iMax = 0;
int jMax = 0;
int arr[rows][cols];
void arr_f()
{
setlocale(LC_ALL, "rus");
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
cin >> arr[i][j];
}
}
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
cout << " " << arr[i][j] << "t";
if (arr[i][j] > arr[iMax][jMax])
{
iMax = i;
jMax = j;
}
}
cout << endl;
}
cout << endl << "The maximum number of array: " << arr[iMax][jMax] << endl << endl;
}
int main()
{
arr_f();
system("pause");
}
尝试添加功能
inline void swap_columns(const int f, const int s)
{
for (int i = 0; i < rows; ++i)
{
swap(arr[i][f], arr[i][s]);
}
}
inline void swap_rows(const int f, const int s)
{
for (int i = 0; i < rows; ++i)
{
swap(arr[f][i], arr[s][i]);
}
}
并在arr_f((函数中添加以下内容:
swap_rows(0, iMax);
swap_columns(0, jMax);
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
cout << " " << arr[i][j] << "t";
}
cout << endl;
}
但在这种情况下,行(和列(并没有如预期的那样改变(最大值所在的行立即被第一行替换,忽略其余行(。
您获得了错误的结果,因为swap_columns
和swap_rows
进行了不允许的操作。你需要这样做:
inline void swap_columns(const int k)
{
for (int i = 0; i < rows; ++i)
{
swap(arr[i][k], arr[i][k+1]);
}
}
inline void swap_rows(const int k)
{
for (int i = 0; i < rows; ++i)
{
swap(arr[k][i], arr[k+1][i]);
}
}
并以这种方式应用:
for (int k = iMax-1; k >= 0; --k)
swap_rows(k);
for (int k = jMax-1; k >= 0; --k)
swap_columns(k);
当然,这可以通过移动更大的块来改善,但这是一个优化问题。
要交换相邻的行和列,只需替换它:
swap_rows(0, iMax);
swap_columns(0, jMax);
这个:
swap_rows(iMax + 1, iMax);
swap_columns(jMax + 1, jMax);
然而,从问题描述中还不清楚这是否总是所需的解决方案。如果iMax恰好是最后一行索引,那么iMax+1将超出界限,并在运行时失败。在这种情况下,可能需要iMax-1。
相关文章:
- 重新排列数组的行和列时出现问题
- Qt的新信号/时隙语法问题 - 连接到一个简单的函数
- 嵌套的类成员变量不可访问.链表设置.V、下一个和新的问题
- 在张量流中创建新操作时指定形状句柄的形状(输出张量的秩问题)
- “如果 constexpr”与非安置新问题
- 复制到新阵列时出现动态内存分配问题
- 将词法分析器字符串累加器移植到新版本的 Quex 时出现问题
- 初始化新对象时C++默认构造函数和 POD 问题
- 分割故障 - 遇到问题,创建新的数组实例
- 问题 - 递归函数以返回文本文件排列
- OpenACC - C++"新"运营商问题
- 访问新创建的操作时出现问题
- R6010 执行后出错.if 语句在 for 循环中.[作业][中止已解决,发现新问题]
- 在添加新记录和访问记录时有一个问题
- 操作员新实施可见性问题
- C++将字符串写入文本文件中的行;新行问题不起作用
- C++新字符[]的问题
- 关于包括新类的基本问题
- 排列函数和交换字符串值的问题
- 问题新删除