Помогите отсортировать двумерный массив (С++)
Дана целочисленная матрица.
1. Определить номер первого столбца, содержащий хотя бы один нулевой элемент.
2. Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Отсортировать строки матрицы по убыванию характеристик.
Первая часть сделана! Помогите, пожалуйста, отсортировать.
#include <iostream.h>
#include <iomanip.h>
int main() {
int nrow, k, ncol;
cout<<"Vedite koli4estvo strok i stolbcov: ";
cin>>nrow>>ncol;
int i, j;
int **a=new int *[nrow];
for (i=0; i<nrow; i++) a[i]=new int [ncol];
cout<<"Vvedite elementi massiva: "<<endl;
for (i=0; i<nrow; i++)
for (j=0; j<ncol; j++) cin>>a[i][j];
for (i=0; i<nrow; i++) {
for (j=0; j<ncol;j++) cout<<setw(4)<<a[i][j]<<" ";
cout<<endl;}
int num=-1;
for (j=0; j<ncol; j++)
for (i=0; i<nrow; i++)
{
if (a[i][j]==0)
{ k=j+1;
cout<<"Nomer stolbca: "<<k<<endl; break;
}
}
if (num==-1) cout<<"Stolbcov net"<<endl;
return 0;
}
|
Luda-tin,
Цитата:
Цитата Luda-tin
Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Отсортировать строки матрицы по убыванию характеристик. »
|
очевидно надо получить еще один двумерный массив (сумма - строка) и отсортировать его любым удобным способом Алгоритмы_сортировки Можно начать с сортировки пузырьком.
P.S. Оформляйте пожалуйста код тегом <noparse> <code> </code> </noparse>. Для упрощения, выделите код и нажмите кнопку # (строка форматирования сообщения)
|
Цитата:
Цитата lxa85
надо получить еще один двумерный массив (сумма - строка) »
|
проще, наверное, одной функцией получать сумму строк, а другой сортировать
сумма строк
Код:
int* GetStrCharacters(int** arr, int row, int col)
{
int* sums = new int[row];
for (int i = 0; i < row; i++)
{
int curSum = 0;
for (int j = 0; j < col; j++)
{
if((arr[i][j]<=0) && (arr[i][j]%2 ==0))
curSum += arr[i][j];
}
sums[i] = curSum;
}
return sums;
}
|
Цитата:
Цитата ferget
проще, наверное, одной функцией получать сумму строк, а другой сортировать »
|
Наверно слишком поздно (час ночи), но разница для меня ускользает. :(
|
Так, нет?
Код:
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
int GetCharacters(int* arr, int num)
{
int sum = 0;
for (int i = 0; i < num; i++)
{
if((arr[i]<=0) && (arr[i]%2 ==0))
sum += arr[i];
}
return sum;
}
int main() {
SetConsoleOutputCP(1251);
int nrow, k = 0, ncol;
cout<<"Vedite koli4estvo strok i stolbcov: ";
cin>>nrow>>ncol;
int **a = new int *[nrow];
for (int i = 0; i < nrow; i++) a[i] = new int [ncol];
cout<<"Vvedite elementi massiva: "<<endl;
for (int i = 0; i < nrow; i++)
for (int j = 0; j < ncol; j++) cin>>a[i][j];
for (int i = 0; i < nrow; i++) {
for (int j = 0; j < ncol;j++){
if (a[i][j] == 0 && k == 0) {
k = j + 1;
}
cout<<setw(4)<<a[i][j]<<" ";
}
cout<<endl;
}
if (k) cout<<"Номер первого столбца содержащего 0: "<<k<<endl;
else cout<<"Нет столбцов содержащих 0 :-("<<endl;
int *t;
for(int j = 0;j< nrow ; j++){
for(int i = 0;i < nrow - j - 1;i++)
if(GetCharacters(a[i],ncol) < GetCharacters(a[i + 1],ncol)){
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
cout<<"Отсортированный массив: "<<endl;
for (int i = 0; i < nrow; i++) {
for (int j = 0; j < ncol;j++)
cout<<setw(4)<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
|
Время: 02:11.
© OSzone.net 2001-