Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2016, 22:11   #1
Mas0n_
Пользователь
 
Регистрация: 22.10.2016
Сообщений: 22
По умолчанию Двумерные массивы. Поиск одинаковых элементов. С++

Помогите решить задачу, пожалуйста!
Условие: дана целочисленная прямоугольная матрица. Определить максимальное из чисел, встречающихся в заданной матрице более одного раза.
вот код
Код:
max = a[0][0];
	int found, i, j, m = 0, n = 0;
	for (int i = 0; i < str; i++){
		for (int j = 0; j < stb; j++){
			found = 0;
			for (int m = i; m < str && !found; m++){
				for (int n = j; n < stb && !found; n++) {
					if (a[i][j] == a[m][n]) {
						if (a[i][j] > max) {
							max = a[i][j];
							found = 1;
						}
					}
				}
			}
		}
	}
	return max;
Проблема возникает при переходе на другую строку. т.е когда i = 0 j = 2, то должно быть m =1, n =0. Не знаю, как это реализовать.
ИСПРАВЬТЕ, пожалуйста, код!

Последний раз редактировалось Mas0n_; 21.12.2016 в 22:26.
Mas0n_ вне форума Ответить с цитированием
Старый 21.12.2016, 22:24   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Код:
if((i == 0)&&(j == 2))
{
m =1;
n =0;
}
ura_111 вне форума Ответить с цитированием
Старый 21.12.2016, 22:30   #3
Mas0n_
Пользователь
 
Регистрация: 22.10.2016
Сообщений: 22
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Код:

if((i == 0)&&(j == 2))
{
m =1;
n =0;
}
Если бы было всё так просто, я бы эту тему не создавал. Попробуйте в свой компилятор вставить код с этим изменением. Ничего не получится. Прежде, чем давать ответ, проверьте этот код сами.
Mas0n_ вне форума Ответить с цитированием
Старый 21.12.2016, 23:36   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Код:
#include <iostream>
using namespace std;

int main()
{
	int a[3][3] = {
		{ 4, 5, 7 },
		{ 8, 6, 3 },
		{ 6, 5, 6 }};

	int max1 = 0;
	int max2 = 0;
	int str = 3;
	int stb = 3;

	int found = 0, i, j, m = 0, n = 0;
	int ERROR = 0;

	max1 = a[0][0];
	for (int i = 0; i < str; i++)
	{
		for (int j = 0; j < stb; j++)
		{
			if (a[i][j] > max1)
			{
				max1 = a[i][j];				
			}
		}
	}
	for (int i = 0; i < str; i++)
	{
		for (int j = 0; j < stb; j++)
		{
			if (a[i][j] == max1)
			{
				found++;
			}
		}
	}
	if (found > 1)
	{
		return max1;
	}
	ERROR++;

	while (ERROR < str*stb)
	{		
		found = 0;
		max2 = a[0][0];
		for (int i = 0; i < str; i++)
		{
			for (int j = 0; j < stb; j++)
			{
				if (a[i][j] > max2 && a[i][j] < max1)
				{
					max2 = a[i][j];					
				}
			}
		}
		for (int i = 0; i < str; i++)
		{
			for (int j = 0; j < stb; j++)
			{
				if (a[i][j] == max2)
				{
					found++;
				}
			}
		}
		if (found > 1)
		{
			return max2;
		}
		
		found = 0;
		max1 = a[0][0];
		for (int i = 0; i < str; i++)
		{
			for (int j = 0; j < stb; j++)
			{
				if (a[i][j] >= max1 && a[i][j] < max2)
				{
					max1 = a[i][j];
					found++;
				}
			}
		}
		for (int i = 0; i < str; i++)
		{
			for (int j = 0; j < stb; j++)
			{
				if (a[i][j] == max2)
				{
					found++;
				}
			}
		}
		if (found > 1)
		{
			return max1;
		}
		ERROR++;
	}	

	return 0;
}
ura_111 вне форума Ответить с цитированием
Старый 21.12.2016, 23:42   #5
Mas0n_
Пользователь
 
Регистрация: 22.10.2016
Сообщений: 22
По умолчанию

Спасибо за отзыв. Но я уже успел сам додумать. Код проще вышел.
Код:
#include <iostream> 
using namespace std;
int &same_max(int**, int, int);
int found, i, j, m, n, max;
void main()
{
	int str, stb, i, j;
	cout << "Enter the number of rows: "; cin >> str;
	cout << "Enter the number of columns: "; cin >> stb;
	int **a = new int*[str];
	for (i = 0; i < str; i++)
		a[i] = new int[stb];
	for (i = 0; i < str; i++)
	for (j = 0; j < stb; j++)
		cin >> a[i][j];
	cout << "Maximal among the same elements " << same_max(a, str, stb) << endl;
	delete[]a;
}
int &same_max(int **a, int str, int stb)
{
	max = -999;
	for (int i = 0; i < str; i++)
	{
		for (int j = 0; j < stb; j++)
		{
			found = 0;
			for (int m = i; m < str && !found; m++)
			{
				for (int n = 0; n < stb && !found; n++) 
				{
					if ((a[i][j] == a[m][n]) && (&a[i][j] != &a[m][n])) {
						if (a[i][j] > max)
							max = a[i][j];
						found = 1;
					}
				}
			}
		}
	}
	return max;
}
Mas0n_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск одинаковых элементов в 2-ух массивах Mixasnt Помощь студентам 3 14.01.2014 17:58
Два разных файла. Поиск одинаковых элементов и запись значения ячейки. QwerG Microsoft Office Excel 7 10.10.2012 12:21
поиск серии одинаковых элементов строк матрицы Termit1995 Помощь студентам 1 20.05.2010 06:44
поиск одинаковых элементов одномерного массива и их количества MyQwErTy Помощь студентам 2 28.02.2009 17:17
Поиск одинаковых элементов Expected } Общие вопросы C/C++ 0 08.01.2009 15:54