1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
1

Путем перестановки квадратной веществ. матрицы добиться того, чтобы максимум находился в левом верхнем углу

19.12.2010, 10:55. Показов 3766. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
путем перестановки квадратной веществ. матрицы добиться того, чтобы максимальный элемент находился в левом верхнем углу, следующий по величине - в позиции (2,2), следующий - в позиции (3,3) и т.д., заполнив таким образом всю главную диагональ.

помогите с алгоритмом работы..
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2010, 10:55
Ответы с готовыми решениями:

Путем перестановки элементов квадратной матрицы добиться того,чтобы ее макс элемент находился в левом верхнем углу
Путем перестановки элементов квадратной матрицы добиться того,чтобы ее макс элемент находился в...

Путем перестановки элементов квадратной действительной матрицы достичь того, чтобы ее максимальный элемент находился в левом верхнем углу...
Это задание: путем перестановки элементов квадратной действительной матрицы достичь того, чтобы ее...

Перестановкой элементов матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу
Путем перестановки элементов квадратной матрицы добиться того,чтобы ее макс элемент находился в...

Добиться того, чтобы наибольший элемент данной матрицы оказался в верхнем левом углу
Дана вещественная матрица размером N x M . Переставляя ее строки и столбцы, добиться того,...

10
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
19.12.2010, 11:23 2
Цитата Сообщение от Lana937 Посмотреть сообщение
помогите с алгоритмом работы..
Очень просто - находим максимальный элемент матрицы, запоминаем его координаты, меняем местами первый столбец матрицы и столбец с макс. элементом, затем меняем местами первую строку и строку с макс. элементом. Вот и все - макс. элемент в левом верхнем углу. С остальными по анологии.
0
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
22.12.2010, 17:53  [ТС] 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
   #include <iostream>
using namespace std;
void main()
{
setlocale (LC_ALL,".1251");
int m, n; 
int i,j; 
cout<<"n=";  cin>>n; 
cout<<"m=";cin>>m;
int A[100][100];
for (i = 0; i < n; ++i)
{    for (j = 0; j < m; ++j)
    {
      {cin>>A[m][n];}
    }
}  cout<<endl<<"-------------------------"<<endl;
 
min = max = A[0][0]; 
for(i = 1; i < n; i++)
 for (j = 0; j < m; ++j)
     if(A[m][n] > max) {max = A[m][n];}; 
cout << endl;
 
 for (i = 0; i < n; ++i)
 {    for (j = 0; j < m; ++j)}
cout << A[m][n];
}
return 0;
}
0
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
23.12.2010, 14:32  [ТС] 4
никто не знает.. =(((
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
23.12.2010, 15:00 5
Могу поделится таким вот кодом (там даже коментарии есть)), думаю вам несложно будет его переделать под свою задачу.\
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//Сформировать матрицу B(m, n), элементами которой являются случайные
//числа, равномерно распределенные в интервале [-5,5]. Переставляя ее
//строки и столбцы, добиться того, чтобы наибольший элемент матрицы
//оказался в правом нижнем углу.
//////////////////////////////////////////////////////////////////////////
#include<iostream>
#include<ctime>
using namespace std;
void gen_random(int[][6]);//ф-ция для заполнения двумерног массива случайными числами
const int n=5;//константы для размера матрицы
const int m=6;
int main(){
    setlocale( LC_ALL,"Russian" );
    int matrix[n][m];//двумерный массив - т.е. матрица n*m
    gen_random(matrix);//заполняем матрицу
    int a,b, max=matrix[0][0];
    for(int i=0;i<n;i++)//находим максимальный элемент и его координаты в матрице
        for(int j=0;j<m;j++)//двойной цикл, т.к. массив двумерный
            if(matrix[i][j]>max){//если элемент матрицы больше максималького
                max=matrix[i][j];//то максимальным делаем этот элемент
                a=i;//и запоминаем его координаты
                b=j;
            }
    cout<<"Матрица до преобразования:"<<endl;
           for(int i=0;i<n;i++){//вывод содержимого матрицы 
        for(int j=0;j<m;j++)
            cout<<matrix[i][j]<<"   ";
        cout<<endl;
    }
    for(int i=0;i<m;i++){//в цикле меняем местами первый столбец и столбец с максимальным элементом
        int tmp=matrix[i][0];
        matrix[i][0]=matrix[i][b];
        matrix[i][b]=tmp;
    }
    for(int i=0;i<n;i++){//меняем местами последний ряд, и ряд с максимальным элементом
        int tmp=matrix[n-1][i];//таким образом максимальный элемент оказывается 
        matrix[n-1][i]=matrix[a][i];//в правом нижнем углу , как и нужно по заданию
        matrix[a][i]=tmp;
    }
    cout<<"Матрица после преобразования:"<<endl;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++)
            cout<<matrix[i][j]<<"   ";
        cout<<endl;
    }
    system("pause");
    return 0;
}
void gen_random(int matr[][6]){//заполняем двумерный массив случайными числами
    srand(time(NULL));
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            matr[i][j]=rand()%11-5;//эта конструкция заполняет массив числами от -5 до 5
}
2
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
23.12.2010, 15:18  [ТС] 6
а как можно сделать, если сначала по убыванию элементы поставить, а потом поменять местами элементы с первой строки и главной диагональю..
будет ли это верным решением??
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
23.12.2010, 15:30 7
Цитата Сообщение от Lana937 Посмотреть сообщение
а как можно сделать, если сначала по убыванию элементы поставить, а потом поменять местами элементы с первой строки и главной диагональю..
будет ли это верным решением??
вобщем-то требуемый результат будет достигнут, но это лишнее. И из условия
путем перестановки квадратной веществ. матрицы добиться того...
можно предположить, что нужно менять местами строки и столбцы, а не просто элементы матрицы. Так, как вы предлагаете, все элементы будут находится в одной строке, с которой потом уже ни чего не сделаешь.
Да и само задание по-моему не имеет 100%-ного решени, т.к. если например максимальный элемент и следующий за ним максимальный элемент будут находится в одной строке (или столбце), то задача уже не имеет решения. Ну это елси ее нужно решать, так, как я понял.
0
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
23.12.2010, 15:51  [ТС] 8
спасибо за помощь))
но конечно я и сама не поняла до конца..
0
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
24.12.2010, 14:10  [ТС] 9
можно еще вопрос по этой теме))

если предположим после процедуры получилась, матрица все элементы которой расположены по убыванию. Например
9 8 7
6 5 4
3 2 1
что нужно сделать, чтобы поменять 2 элемента 1 строки(т.е. 8 и 9) с элементами главной диагоняли(т.е. 5 и 1)

то есть чтобы в итоге получилось
9 5 1
6 8 4
3 2 7

Добавлено через 1 час 13 минут
можно как то так сделать?

C++
1
2
for(i=0;i<m;i++)
{for(j=0;j<n;j++)  y[i][i]=y[i][j];};
0
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
24.12.2010, 17:30  [ТС] 10
попробовала вот так:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>  
#include <stdlib.h>   
#include <time.h>   
#include <iomanip>   
using namespace std;   
const int m=3, n=3;
void output(int [m][n]); 
void qq(){cout<<"----------------------------------------------"<<endl;}; 
int main()
{
  setlocale (LC_ALL,".1251");   
  int j, i, k, bufer, z[m*n];
  int x[m][n]={{1,2,3},{4,5,6},{7,8,9}}; 
  cout<<"Исходный массив X "<<endl;
  output(x); 
  k=0; 
  for(i=0;i<m;i++)  
  {   for(j=0;j<n;j++) 
      {  z[k]=x[i][j];  k++; 
   }
       };
  for(i=0;i<(m*n-2);i++)
  { for(j=0;j<(m*n-1-i);j++)
      { if(z[j]<z[j+1]){bufer=z[j];z[j]=z[j+1];z[j+1]=bufer;}
  }
      }
  k=0;  
  for(i=0;i<m;i++) 
  {
      for(j=0;j<n;j++) {x[i][j]=z[k];k++;}
  };
  cout<<"Упорядоченный массив X"<<endl; 
  output(x); 
  return 0;
}
void output(int x[m][n]) 
{ 
    int i,j; 
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++){cout<<setw(5)<<x[i][j];};
        cout<<endl; 
    }
    qq(); 
 
 
        system("PAUSE");
}
void pp(int x[m][n]) 
{ 
    int i,j;
for(i=0;i<m;i++)
{for(j=0;j<n;j++)  {x[i][i]=x[i][j];};
};
}
но не считает как надо( в чем ошибка? подскажите,пожалуйста..

Добавлено через 20 минут
или так делать вообще нельзя??
0
1 / 1 / 0
Регистрация: 28.10.2010
Сообщений: 46
24.12.2010, 19:13  [ТС] 11
разве на сайте никто не сидит??)))))
0
24.12.2010, 19:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2010, 19:13
Помогаю со студенческими работами здесь

Добиться того, чтобы один из элементов матрицы, обладающий наибольшим по модулю значением, располагался в левом верхнем углу матрицы
Назовем допустимым преобразованием матрицы перестановку двух строк или двух столбцов. Дана...

Переставляя строки и столбцы матрицы, добиться, чтобы наибольший элемент оказался в верхнем левом углу
Дана вещественная матрица A размером 7*4. Переставляя ее строки и столбцы,добиться того,чтобы...

Массив: Переставляя ее строки и столбцы достичь того, чтобы наибольший элемент матрицы оказался в верхнем левом углу
Написать программу для обработки матрицы. Переставляя ее строки и столбцы достичь того, чтобы...

Переставить строки и столбцы для того чтобы максимальный элемент оказался в верхнем левом углу
Дана вещественная матрица n x m.Переставить строки и столбцы для того чтобы максимальный элемент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru