Форум программистов, компьютерный форум CyberForum.ru

Перестановками заполнить главную диагональ двумерного массива наибольшими элементами - C++

Восстановить пароль Регистрация
 
Анна Лето
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 47
21.11.2014, 13:18     Перестановками заполнить главную диагональ двумерного массива наибольшими элементами #1
Дана квадратная матрица. С помощью перестановок добиться того, чтобы её максимальный элемент находился в верхнем левом углу, следующий по величине в позиции (2.2) и т.д. Таким образом необходимо заполнить все главную диагональ.
Подскажите, как рациональнее сделать это.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2014, 13:18     Перестановками заполнить главную диагональ двумерного массива наибольшими элементами
Посмотрите здесь:

Матрицы: отсортировать главную диагональ по убыванию C++
Как правильно реализовать заполнение двумерного массива элементами C++
Найти главную диагональ матрици C++
Матрица, главную диагональ заменить нулями C++
Заменить главную диагональ матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
21.11.2014, 13:28     Перестановками заполнить главную диагональ двумерного массива наибольшими элементами #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int a[N][N];
...
for(int i=0;i<n;i++)
{
  int mx=a[i][i];
  int i0=i;
  int j0=i;
  for(int i1=0;i1<N;i1++)
    for(int j=0;j<N;j++)
       if( (i1!=j || i1>i) && mx<a[i1][j])
       {
             mx=a[i1][j];
             i0=i1;j0=j;
       }
   int t=a[i][i];
   a[i][i]=mx;
   a[i0][j0]=t;
}
Amandosov
Знаток
156 / 156 / 65
Регистрация: 18.11.2012
Сообщений: 411
Записей в блоге: 2
21.11.2014, 13:38     Перестановками заполнить главную диагональ двумерного массива наибольшими элементами #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Example program
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    int a[100][100],buf,n,max,x,y,b[100];
    cin>>n;
    
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    cin>>a[i][j];
    
    int min=a[0][0];
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    if(min>a[i][j]) min=a[i][j];
  
    for(int k=0;k<n;k++)
    {
    b[k]=a[0][0];x=0;y=0;
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    if(a[i][j]>b[k]){b[k]=a[i][j];x=i;y=j;}
    a[x][y]=a[k][k];
    a[k][k]=min;    
    }
    for(int i=0;i<n;i++)
    a[i][i]=b[i];
    
    for(int i=0;i<n;i++)
    {for(int j=0;j<n;j++)
    cout<<a[i][j]<<' ';
    cout<<endl;}
 return 0;   
}
Анна Лето
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 47
21.11.2014, 21:29  [ТС]     Перестановками заполнить главную диагональ двумерного массива наибольшими элементами #4
Скажите, а где в этом коде Вы находите следующий за максимальным элемент. Объясните, пожалуйста, как работает?
Yandex
Объявления
21.11.2014, 21:29     Перестановками заполнить главную диагональ двумерного массива наибольшими элементами
Ответ Создать тему
Опции темы

Текущее время: 08:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru