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];
coutvoid 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;
}