Пример. Дана прямоугольная матрица переставить столбцы таким образом, чтобы их максимальные элементы образовывали неубывающую последовательность. Разрешается использовать только дополнительный одномерный динамический массив.
#include using namespace std;
int main() {
int i,j,imax,jmax,imin,jmin,N,M;
double min,max,b;
cout<<"N=";cin>>N;
cout<<"M=";cin>>M;
int *a=new int[N*M];
cout<<"Input Matrix A"<for(i=0;ifor(j=0;jcin>>*(a+i*M+j);
for(max=min=*a,imax=jmax=imin=jmin=i=0;ifor(j=0;j{ if ((*(a+i*M+j))>max)
{max=*(a+i*M+j); imax=i;jmax=j;}
if ((*(a+i*M+j)){min=*(a+i*M+j); imin=i;jmin=j;}}
b=*(a+imax*M+jmax);*(a+imax*M+jmax)=*(a+imin*M+jmin);
*(a+imin*M+jmin)=b;
cout<<"Output Matrix A"<for(i=0;ifor(j=0;jcout<<*(a+i*M+j)<<"\t";
delete[]a;
}
Выведите заданную матрицу в виде спирали, разделив матрицу на циклы: Задачу можно решить, разделив матрицу на петли, квадраты или границы. Можно видеть, что элементы внешнего цикла печатаются сначала по часовой стрелке, затем печатаются элементы внутреннего цикла. Таким образом, печать элементов цикла может быть решена с помощью четырех циклов, которые печатают все элементы. Каждый цикл ‘for’ определяет движение в одном направлении вместе с матрицей. Первый цикл for представляет движение слева направо, тогда как второй обход представляет движение сверху вниз, третий представляет движение справа налево, а четвертый представляет движение снизу вверх
Следуйте приведенным шагам для решения проблемы:
Создайте и инициализируйте переменные k – индекс начальной строки, m – индекс конечной строки, l – индекс начального столбца, n – индекс конечного столбца
Выполняйте цикл до тех пор, пока не будут напечатаны все квадраты циклов.
При каждом обходе внешнего цикла выводите элементы квадрата по часовой стрелке.
Выведите верхнюю строку, т.е. выведите элементы k-й строки с индексом столбца l до n и увеличьте количество k.
Выведите правый столбец, т.е. выведите последний столбец или n-й столбец от индекса строки k до m и уменьшите количество на n.
Выведите нижнюю строку, т.е. если k < m, то выведите элементы m-1-й строки из столбца n-1 в l и уменьшите количество m
Выведите левый столбец, т. е. если l < n, то выведите элементы l-го столбца из m-1-й строки в k и увеличьте количество l.
Ниже приведена реализация вышеупомянутого подхода:
#include using namespace std;
#define R 4
#define C 4