c++2维数组旋转



我正在用C++编写一个程序,显示一个二维数组,然后将其旋转90、180和270度。数组是由E和空格组成的大写"E"。我已经编写了这个程序,但当我运行它时,它确实会打印旋转但垂直(从上到下(的E,我的教授希望它们旋转但水平(从左到右(打印。

根据我的逻辑,我必须编辑我的代码才能做到:

->打印阵列行1
->rotate90
->打印阵列行1
>>rotate90(还原为原始(
->rotate180
->打印阵列行1:br>->rotate180

连续7次,直到打印完所有行。

我知道有一种更简单的方法,但我无法理解如何做。

#include <iostream>
using namespace std;
char eArray[][7]{
{'E','E','E','E','E','E','E'},
{'E',' ',' ',' ',' ',' ',' '},
{'E',' ',' ',' ',' ',' ',' '},
{'E','E','E','E','E',' ',' '},
{'E',' ',' ',' ',' ',' ',' '},
{'E',' ',' ',' ',' ',' ',' '},
{'E','E','E','E','E','E','E'},
};
int n = 7;
void rotateArray90(char a[][7]){
for (int i = 0; i < n; i += 1) {
for (int j = i+1; j < n; j += 1) {
swap(eArray[i][j], eArray[j][i]);
}}}
void flipArray180(char a[][7]){
for (int i = 0; i < n; i += 1) {
for (int j = 0; j < n/2; j += 1) {
swap(eArray[i][j], eArray[i][n-1-j]);
}}}
void rotateArray270(char a[][7]){
for (int i = 0; i < n; i += 1) {
for (int j = 0; j < n/2; j += 1) {
swap(eArray[i][j], eArray[n-1-i][j]);
}}}
void printArray(char a[][7]){
for (int i = 0; i < n; ++i){
for (int j = 0; j < n; ++j){
cout << eArray[i][j] <<" ";
}cout << endl;
}}
int main(){
printArray(eArray);
cout <<"n";
rotateArray90(eArray);
printArray(eArray);
cout <<"n";
rotateArray90(eArray);
flipArray180(eArray);
printArray(eArray);
cout <<"n";
flipArray180(eArray);
rotateArray270(eArray);
printArray(eArray);
cout <<"n";
rotateArray270(eArray);
}

谢谢你的帮助。

我不确定我抓到你了,但你在这里做的不是旋转(在矩阵旋转的意义上(。当应用rotateArray90(eArray)两次时,应该将数组旋转180度,但它会返回到原始数组。这是我的轮换方法,看看它是否有帮助。当你使用它时,你不需要单独的方法来旋转180、270等度,你只需要应用它2、3、。。。时间。第4次旋转后,数组返回到原来的位置。它适用于任何矩形阵列,而不仅仅是n x n。并且您不必使用原始指针,而是使用容器。

template<typename T>
void printArray(const vector<vector<T>> &vch) {
for (int i = 0; i < vch.size(); ++i) {
for (int j = 0; j < vch[0].size(); ++j) {
cout << vch[i][j] << " ";
}
cout << endl;
}
}
template<typename T>
void rotateArray(vector<vector<T>> &v)
{
vector<vector<T>>rotated;
for (size_t i = 0; i < v[0].size(); i++) {
vector<T> newRow;
for (int j = v.size() - 1; j >=0; j--) {
newRow.push_back(v[j][i]);
}
rotated.push_back(newRow);
}
v = rotated;
}

以下是如何使用的示例:

int main() {
vector<vector<char>> vch = {
{'E', 'E', 'E', 'E', 'E', 'E', 'E'},
{ 'E',' ',' ',' ',' ',' ',' ' },
{ 'E',' ',' ',' ',' ',' ',' ' },
{ 'E','E','E','E','E',' ',' ' },
{ 'E',' ',' ',' ',' ',' ',' ' },
{ 'E',' ',' ',' ',' ',' ',' ' },
{ 'E','E','E','E','E','E','E' },
};

printArray<char>(vch);
cout << "n";
rotateArray<char>(vch);
printArray<char>(vch);
cout << "n";
rotateArray<char>(vch);
printArray<char>(vch);
cout << "n";
rotateArray<char>(vch);
printArray<char>(vch);
cout << "n";
return 0;
}
//orignal
E E E E E E E
E
E
E E E E E
E
E
E E E E E E E
// rotated 90
E E E E E E E
E     E     E
E     E     E
E     E     E
E     E     E
E           E
E           E
// rotated 180    
E E E E E E E
E
E
E E E E E
E
E
E E E E E E E
// rotated 270    
E           E
E           E
E     E     E
E     E     E
E     E     E
E     E     E
E E E E E E E
// rotated 360
E E E E E E E
E
E
E E E E E
E
E
E E E E E E E

最新更新