C++ 按升序C+对次对角线的元素进行排序+;

C++ 按升序C+对次对角线的元素进行排序+;,c++,arrays,C++,Arrays,我认为,我需要将函数printSecondaryDiagonal(实际上是打印次对角线的元素)转换为一维数组,然后按升序对其元素进行排序,对吗 另外,开始时的二维数组必须是动态数组。此外,无法使用向量执行此操作。仅限malloc、calloc和new #include <iostream> #include <iomanip> using namespace std; void getManual(int** arr, int rows, int columns); v

我认为,我需要将函数
printSecondaryDiagonal
(实际上是打印次对角线的元素)转换为一维数组,然后按升序对其元素进行排序,对吗

另外,开始时的二维数组必须是动态数组。此外,无法使用
向量
执行此操作。仅限
malloc
calloc
new

#include <iostream>
#include <iomanip>
using namespace std;

void getManual(int** arr, int rows, int columns);
void getRandom(int** arr, int rows, int columns);
void printSecondaryDiagonal(int** arr, int rows, int columns);

void main() {
    int rowCount = 5;
    int colCount = 6;

    cout << "Enter quantity of rows: ";
    cin >> rowCount;
    cout << "Enter quantity of columns: ";
    cin >> colCount;

    int** arr = new int* [rowCount];

    for (int i = 0; i < rowCount; i++) {
        arr[i] = new int[colCount];
    }

    cout << " Array formation algorithm\n";
        start:
    cout << "Input number : \n1 for manual\n2 for random\n";
    int k;
    cin >> k;
    switch (k) {
    case 1: getManual(arr, rowCount, colCount);
        break;
    case 2: getRandom(arr, rowCount, colCount);
        break;
    default:cout << "Input 1 or 2, please.";
        cout << endl << endl;
        goto start;
    }
    cout << endl;

    printSecondaryDiagonal(arr, rowCount, colCount);
        
    for (int i = 0; i < rowCount; i++) { //очищуємо память для кожного рядка
        delete[] arr[i];
    }

    delete[] arr;
}

void getManual(int** arr, int rows, int columns) { //введення з клавіатури
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
            cout << "a[" << i << "][" << j << "]=";
            cin >> arr[i][j];
            //cin >> *(*(arr + i) + j); //вказівникова форма
        }
    }
}

void getRandom(int** arr, int rows, int columns) { //випадкова генерація чисел
    int lowest = -21, highest = 34;
    int i, j;
    srand(time(NULL));
    // ініціалізація масива
    for (i = 0; i < rows; i++) {
        for (j = 0; j < columns; j++) {
            arr[i][j] = lowest + rand() % (highest - lowest + 1);
            cout << setw(7) << arr[i][j];
        }
        cout << endl;
    }
}
#包括
#包括
使用名称空间std;
void getManual(int**arr,int行,int列);
void getRandom(int**arr,int行,int列);
void printSecondary对角线(int**arr,int行,int列);
void main(){
int rowCount=5;
int colCount=6;
cout>行数;
cout>colCount;
int**arr=新int*[rowCount];
对于(int i=0;i默认值:cout如我所示,可以使用一个for循环提取次对角线的元素。次对角线将保存在一维数组“secDiag[I]”中。然后,在“algorithm”头文件中使用“std::sort”对该数组进行升序排序

void printSecondaryDiagonal(int** arr, int rows, int columns) {

    cout << "Secondary Diagonal: ";
    int *secDiag = new int [rows];
    int r, c;
    for (r = 0; r < rows ; r++) {
              c = columns - r -1;
             if (c < 0) break;
             secDiag[r] = arr[r][c];
        }
    for (int i =0; i<r; i++) std::cout << setw(7) << secDiag[i];
    std::cout << std::endl;
    std::cout << "After sorted: ";
    std::sort(secDiag, secDiag+r);
    for (int i =0; i<r; i++) std::cout << setw(7) << secDiag[i];
    std::cout << std::endl;
    delete [] secDiag;
}

如我所示,可以使用一个for循环提取次对角线的元素。次对角线将保存在一维数组“secDiag[I]”中。然后,在“algorithm”头文件中使用“std::sort”对该数组进行升序排序

void printSecondaryDiagonal(int** arr, int rows, int columns) {

    cout << "Secondary Diagonal: ";
    int *secDiag = new int [rows];
    int r, c;
    for (r = 0; r < rows ; r++) {
              c = columns - r -1;
             if (c < 0) break;
             secDiag[r] = arr[r][c];
        }
    for (int i =0; i<r; i++) std::cout << setw(7) << secDiag[i];
    std::cout << std::endl;
    std::cout << "After sorted: ";
    std::sort(secDiag, secDiag+r);
    for (int i =0; i<r; i++) std::cout << setw(7) << secDiag[i];
    std::cout << std::endl;
    delete [] secDiag;
}
void printSecondary对角线(int**arr,int行,int列){
cout列)
{
大小=列;
}
其他的
{
大小=行;
}
int*对角线=新int[大小];
而(i=0)
{
对角线[k]=arr[i][j];
cout
void printSecondary对角线(int**arr,int行,int列){
cout列)
{
大小=列;
}
其他的
{
大小=行;
}
int*对角线=新int[大小];
而(i=0)
{
对角线[k]=arr[i][j];

cout“不能使用vector完成”。如果您需要vector提供的动态分配,创建一个简化版本的vector通常是一个好的开始。“不能使用vector完成”。如果您需要vector提供的动态分配,则创建vector的简化版本通常是一个良好的开端。但是,此代码可能会回答此问题,添加一些说明以捍卫您的代码和观点是一个良好的做法。谢谢。我将在下次处理此问题。但是,此代码可能会回答此问题,这是一个良好的做法为您的代码和观点添加一些说明。谢谢。下次我会处理它。
Enter quantity of rows: 3
Enter quantity of columns: 3
 Array formation algorithm
Input number :
1 for manual
2 for random
2
     33    -13     29
     -7     -2     10
     -8     18      6

Secondary Diagonal:      29     -2     -8
After sorted:      -8     -2     29
  void printSecondaryDiagonal(int** arr, int rows, int columns) {
        
    cout << "Secondary Diagonal: ";
    int i = 0;
    int j = columns - 1;
    int k = 0;
    int size =0;
    if (rows>columns)
    {
      size = columns;
    }
    else 
    {
      size = rows;
    }
    int *diagonal = new int[size];
    while (i < rows && j >= 0)
    {
      diagonal[k] = arr[i][j];

      cout << arr[i][j] << setw (7);
      i++;
      j--;
      k++;
    }
    for (int i = 0; i < size - 1; i++)
    {
      for (int j = 0; j < size - i - 1; j++)
        {
          if (diagonal[j] > diagonal[j + 1])
           {
            // swap arr[j+1] and arr[j] 
            int temp = diagonal[j];
            diagonal[j] = diagonal[j + 1];
            diagonal[j + 1] = temp;
           }
         }
      }
    for (int r = 0; r < size; r++)
    {
      cout << diagonal[r] << endl;
    }
    delete [] diagonal;        
  }