1 / 1 / 0
Регистрация: 12.05.2009
Сообщений: 7
|
|
1 | |
Нохождение локального минимуму в двумерном массиве12.05.2009, 12:39. Показов 1748. Ответов 12
Метки нет (Все метки)
Помогите решить такую задачу :
Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером 10 на 10.
0
|
12.05.2009, 12:39 | |
Ответы с готовыми решениями:
12
Алгоритм расчёта суммы и произведения элементов в одномерном массиве и двумерном массиве и его модификация Нахождение локального максимума в одномерном массиве Найти номер первого локального минимума в массиве Найти индекс последнего локального максимума в заданном массиве |
19 / 19 / 4
Регистрация: 22.03.2009
Сообщений: 57
|
|
12.05.2009, 18:20 | 2 |
покажи пример??
0
|
1 / 1 / 0
Регистрация: 12.05.2009
Сообщений: 7
|
|
12.05.2009, 18:35 [ТС] | 3 |
1 2 3 4 5
6 7 8 8 4 9 7 4 2 3 4 4 5 8 9 тока матрица будет 10 на 10. Жирным шрифтом выделены локальные минимумы. Конечно можно решить эту задачу множеством ифов (if) и for . но как рацианальней это сделать?
1
|
19 / 19 / 4
Регистрация: 22.03.2009
Сообщений: 57
|
|
13.05.2009, 08:36 | 4 |
решение:
Код
#include<iostream.h> #include<conio.h> #include<stdio.h> #include <stdlib.h> void main() { int a[10][10], i, j, n, m, t; cout<<"type number column n: "; cin>>n; cout<<"type number row m: "; cin>>m; for(i=0; i<n; i++) for(j=0; j<m; j++) { a[i][j]=rand() % 10; } for(i=0; i<n; i++) { for(j=0; j<m; j++) { cout<<a[i][j]; cout.width(4); } cout<<"\n"; } cout<<"\nnumber min:\n"; for(i=0; i<n; i++) for(j=0; j<m; j++) if(a[i][j]<a[i-1][j]&&a[i][j]<a[i-1][j-1]&&a[i][j]<a[i-1][j+1]&&a[i][j]<a[i+1][j-1]&&a[i][j]<a[i+1][j-1]&&a[i+1][j+1] &&a[i][j]<a[i][j-1]&&a[i][j]<a[i][j+1]) { cout<<a[i][j]<<"\t"; } return 0; }
0
|
19 / 19 / 4
Регистрация: 22.03.2009
Сообщений: 57
|
|
14.05.2009, 09:34 | 5 |
tammeoja не отвечает! правильно ли я сделал.
0
|
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
|
|
14.05.2009, 10:03 | 6 |
Нет. Берем элемент с индексом 0,0 и смотрим с какими элементами он проверяется...
0
|
1 / 1 / 0
Регистрация: 12.05.2009
Сообщений: 7
|
|
14.05.2009, 15:31 [ТС] | 7 |
опппссс, извини ещё не проверил, сегодня вечером проверю обязательно.
0
|
19 / 19 / 4
Регистрация: 22.03.2009
Сообщений: 57
|
|
14.05.2009, 23:37 | 8 |
вот я так сделал:
Код
#include<iostream.h> #include<conio.h> #include<stdio.h> #include <stdlib.h> #include <time.h> #define h 100 int in(int a[h][h], int n, int m); int out(int a[h][h], int n, int m); int max(int a[h][h], int n, int m); int massivB(int a[h][h], int b[h][h], int n, int m); int in(int a[h][h], int n, int m) { for(int i=0; i<n; i++) for(int j=0; j<m; j++) { a[i][j]=rand() % 10; } } int out(int a[h][h], int n, int m) { for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { cout<<a[i][j]; cout.width(4); } cout<<"\n"; } } int massivB(int a[h][h], int b[h][h], int n, int m) { for(int i=1; i<n+1; i++) for(int j=1; j<m+1; j++) { b[i][j]=a[i-1][j-1]; } /*---------------------------------------*/ int max=a[0][0]; for(int i=0; i<n; i++) for(int j=0; j<m; j++) { if(a[i][j]>max) max=a[i][j]; } /*-------------------------------*/ for(int j=0; j<m+2; j++) { b[0][j]=max; b[n+2][j]=max; } for(int i=0; i<n+2; i++) { b[i][0]=max; b[i][m+2]=max; } } void main() { srand(time(0)); int a[h][h], b[h][h], n, m; cout<<"type number row: ";cin>>n; cout<<"type number column: "; cin>>m; in(a, n, m); cout<<"first matrix:\n"; out(a, n, m); massivB(a, b, n, m); cout<<"\nnumber local min:\n"; for(int i=0; i<n+2; i++) for(int j=0; j<m+2; j++) if(b[i][j]<b[i-1][j]&&b[i][j]<b[i-1][j-1]&&b[i][j]<b[i-1][j+1]&&b[i][j]<b[i+1][j-1]&&b[i][j]<b[i+1][j-1]&&b[i+1][j+1] &&b[i][j]<b[i][j-1]&&b[i][j]<b[i][j+1]&&(i!=0)&&(i!=n+2)&&(j!=0)&&(j!=m+2)) { cout<<b[i][j]<<"\t"; } }
0
|
1 / 1 / 0
Регистрация: 12.05.2009
Сообщений: 7
|
|
15.05.2009, 12:35 [ТС] | 9 |
Предыдущий вариант был неверным. сегодня проверю новый.
0
|
19 / 19 / 4
Регистрация: 22.03.2009
Сообщений: 57
|
|
16.05.2009, 19:38 | 10 |
да, предыдущий вариант был неверным, а последующий ?
0
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
17.05.2009, 19:36 | 11 |
Да тут for for, только есть 1-но "ускорение":
1) если элемент [i,j] является л.м., то ни один из его соседей уже не будет л.м. (т.е. его "соседей" из дальнейшей проверки надо вообще исключить). Других значительных "ускорений", думаю, нет.
0
|
4 / 4 / 0
Регистрация: 17.05.2009
Сообщений: 27
|
|
17.05.2009, 19:42 | 12 |
Не кто и не говорил про ускорение!
0
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
17.05.2009, 20:41 | 13 |
Я просто хотел сказать
(автору ж вроде надо "не просто if for")
0
|
17.05.2009, 20:41 | |
17.05.2009, 20:41 | |
Помогаю со студенческими работами здесь
13
Найти номер его последнего локального максимума в массиве. Найти номер его первого локального минимума в массиве Найти ошибку в методе поиска локального минимума в двухмерном массиве В двумерном массиве... Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |