Дана целочисленная прямоугольная матрица:
- упорядочить строки по возрастанию количества одинаковых элементов в каждой строке;
- найти номер первого из столбцов, не содержащих ни одного отрицательного элемента.
Код программы:
//--------------------------------------------------------------------------- #include<iostream.h> #include<conio.h> #include<math.h> #include<windows.h> #include<iomanip.h> #include<vcl.h> #pragma hdrstop #pragma argsused //--------------------------------------------------------------------------- char *rus(const char *text); int main(int argc, char* argv[]) { randomize(); int n,m,i,j,k,jnum=-1,maxcnt=0,pos=0,buf_a=0,buf_b=0; bool not_neg; cout<<rus("Введите размерность массива:")<<endl; cout<<rus("Введите количество строк: n=");cin>>n; cout<<rus("Введите количество столбцов: m=");cin>>m; int **a=new int*[n]; //объявление основного массива for(i=0;i<n;i++)a[i]=new int [m]; int **a1=new int*[n]; //объявление массива для хранения for(i=0;i<n;i++)a1[i]=new int [m];// количества повторяющихся элементов for(i=0;i<n;i++) //заполнение массива 0, иначе идет некорректное for(j=0;j<m;j++)a1[i][j]=0; //присваивание при подсчете элементов в массиве int *b=new int[i]; //объявление массива для хранения максимального числа // повторяющихся элементов в каждой строке массива //--------------------------------------------------------------------------- cout<<rus("\nВведите элементы массива:")<<endl<<endl; for(i=0;i<n;i++) { for(j=0;j<m;j++) { a[i][j]=-3+random(17); //заполняем массив cout<<setw(4)<<a[i][j]; //случайными числами } cout<<endl; } //--------------------------------------------------------------------------- //поиск столбца без отрицательного элемента for(j=0;j<m;j++) { not_neg=true; for(i=0;i<n;i++) if(a[i][j]<0) { not_neg=false; break; } if(not_neg) { jnum=j; break; } } if(-1==jnum)cout<<rus("\nСтолбцов не содержащих ни одного отрицательного элемента НЕТ!")<<endl; else cout<<rus("\nНомер первого из столбцов не содержащий ни одного отрицательного элемента: ")<<(jnum+1); //--------------------------------------------------------------------------- //поиск максимального количества повторяющихся элементов в каждой строке cout<<endl; for(i=0;i<n;i++) { maxcnt=0; for(j=0;j<m;j++) for(k=j+1;k<m;k++) if(a[i][j]==a[i][k]) a1[i][j]++; for(j=0;j<m;j++) if(a1[i][j]>maxcnt) maxcnt=a1[i][j]; b[i]=maxcnt+1; } //вывод матрицы с количеством максимального элемента в каждой строке cout<<rus("Вывод матрицы с количеством максимального элемента в каждой строке:"); cout<<endl<<endl; for(i=0;i<n;i++) { for(j=0;j<m;j++) cout<<setw(4)<<a[i][j]; cout<<setw(8)<<b[i]<<endl; } cout<<endl; // упорядочивание строк матрицы по возрастанию количества одинаковых элементов в каждой строке for(i=0;i<n;i++) { maxcnt=b[i]; pos=i; for(j=i+1;j<n;j++) if(b[j]<maxcnt) { maxcnt=b[j]; pos=j; } buf_b=b[i]; b[i]=maxcnt; b[pos]=buf_b; for(k=0;k<m;k++) { buf_a=a[i][k]; a[i][k]=a[pos][k]; a[pos][k]=buf_a; } } //--------------------------------------------------------------------------- // вывод упорядоченной матрицы cout<<rus("\nУпорядоченные строки матрицы по возрастанию количества одинаковых элементов:")<<endl; cout<<endl<<endl; for(i=0;i<n;i++) { for(j=0;j<m;j++) cout<<setw(4)<<a[i][j]; cout<<setw(8)<<b[i]<<endl; } getch(); return 0; } //--------------------------------------------------------------------------- char bufrus[256]; char *rus(const char *text) { CharToOem(text, bufrus); return bufrus; } //---------------------------------------------------------------------------
Результат работы программы: