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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2013, 14:02   #21
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Если в предмете сечешь, грех с преподом не поспорить )
Если нет, лучше не спорить.
ну чо там, проверил мой алгоритм?
nikmoon вне форума Ответить с цитированием
Старый 25.11.2013, 14:06   #22
ELaX
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 29
По умолчанию

nikmoon
Код:
#include <iostream>

using namespace std;


// âûâîä ñîäåðæèìîãî ìàòðèöû
void show_matrix(int **matrix, int rows, int cols);

// ïîèñê êîëè÷åñòâà îäèíàêîâûõ ýëåìåíòîâ â ñòðîêå
int equal_count(int *row, int cc);

int main(void)
{
	int i, j, n, m;

	cin >> n >> m;
	int *a = new int[n];

	// ñîçäàåì ìàòðèöó n x m
	int **matrix = new int*[n];
	for (i = 0; i < n; i++)
		*(matrix + i) = new int[m];

	// çàïîëíÿåì ìàòðèöó
	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++) 
			cin >> *(*(matrix + i) + j);

// òåïåðü íóæíî ñäåëàòü ñîðòèðîâêó ñòðîê ïî âîçðàñòàíèþ êîëè÷åñòâà îäèíàêîâûõ ýëåìåíòîâ
	// íå çíàþ ÷òî çà ìåòîä.
	for(i = 0; i < (n-1); i++)
	{
		// íàõîäèì ìàêñèìàëüíûé ýëåìåíò
		int max_elem_index = 0;
		for(j = 0; j < (n - i); j++)
		{
			if (a[j] > a[max_elem_index])
				max_elem_index = j;
		}

		// ïîìåùàåì â ïîñëåäíþþ ÿ÷åéêó ìàêñèìàëüíûé ýëåìåíò
		int tmp = a[n-1-i];
		a[n-1-i] = a[max_elem_index];
		a[max_elem_index] = tmp;

		int *row = matrix[n-1-i];
		matrix[n-1-i] = matrix[max_elem_index];
		matrix[max_elem_index] = row;
	}
	
	show_matrix(matrix, n, m);

	return 0;
}

// âûâîä ñîäåðæèìîãî ìàòðèöû
void show_matrix(int **matrix, int rows, int cols)
{
	for(int i = 0; i < rows; i++)
	{
		for(int j = 0; j < cols; j++)
		{
			cout << matrix[i][j] << " ";
		}
		cout << endl;
	}
}
я правильно вставил? А то первая матрица подходит по результатам а вот 2 нет
ELaX вне форума Ответить с цитированием
Старый 25.11.2013, 14:07   #23
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

полностью согласен с nikmoon.
Отбросьте эмоции, поговорите с преподавателем. Покажите ему, что задача имеет несколько корректных ответов.
Если он увидит, что Вы разбираетесь в теме, то такая беседа пойдёт только на пользу вашей репутации в глазах препода.
Допускаю, что могут быть всякие варианты, нужно по месту/по обстоятельствам решать как и о чём беседовать и беседовать ли вообще...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2013, 14:10   #24
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Не, не добавил код для заполнения массива а.
Код:
	// для каждой строки найдем количество одинаковых элементов
	// и сохраним найденные значения в массиве a
	for (i = 0; i < n; i++)	// цикл по строкам
	{
		a[i] = equal_count(matrix[i], m);
	}
Перед сортировкой добавь.
nikmoon вне форума Ответить с цитированием
Старый 25.11.2013, 14:13   #25
ELaX
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 29
По умолчанию

nikmoon
Код:
#include <iostream>

using namespace std;


void show_matrix(int **matrix, int rows, int cols);


int equal_count(int *row, int cc);

int main(void)
{
	int i, j, n, m;

	cin >> n >> m;
	int *a = new int[n];


	int **matrix = new int*[n];
	for (i = 0; i < n; i++)
		*(matrix + i) = new int[m];


	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++) 
			cin >> *(*(matrix + i) + j);


	for(i = 0; i < (n-1); i++)
	{

		int max_elem_index = 0;
		for(j = 0; j < (n - i); j++)
		{
			if (a[j] > a[max_elem_index])
				max_elem_index = j;
		}


		int tmp = a[n-1-i];
		a[n-1-i] = a[max_elem_index];
		a[max_elem_index] = tmp;

		int *row = matrix[n-1-i];
		matrix[n-1-i] = matrix[max_elem_index];
		matrix[max_elem_index] = row;
	}
	
	show_matrix(matrix, n, m);

	return 0;
}


void show_matrix(int **matrix, int rows, int cols)
{
	for(int i = 0; i < rows; i++)
	{
		for(int j = 0; j < cols; j++)
		{
			cout << matrix[i][j] << " ";
		}
		cout << endl;
	}
}


int equal_count(int *row, int cc)
{
	int max_count = 0;


	for(int i = 0; i < cc; i++)	
	{
		int curr_count = 0;
		for(int j = 0; j < cc; j++)
		{
			if (row[i] == row[j]) 
			{
				curr_count++;
			}
		}
		

		if (curr_count > max_count)
			max_count = curr_count;
	}
	
	return max_count;
}
Вот код целиком какой у меня. Напиши свой со вставкой тогда
ELaX вне форума Ответить с цитированием
Старый 25.11.2013, 14:14   #26
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
полностью согласен с nikmoon.
Отбросьте эмоции, поговорите с преподавателем. Покажите ему, что задача имеет несколько корректных ответов.
Если он увидит, что Вы разбираетесь в теме, то такая беседа пойдёт только на пользу вашей репутации в глазах препода.
Допускаю, что могут быть всякие варианты, нужно по месту/по обстоятельствам решать как и о чём беседовать и беседовать ли вообще...
Только мне попадался преподаватель, спор с которым привел бы к сдаче экзамена с комиссией. Я был к этому не готов, но поспорил.
Два года и в запас ))
nikmoon вне форума Ответить с цитированием
Старый 25.11.2013, 14:15   #27
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Код:
#include <iostream>

using namespace std;


void show_matrix(int **matrix, int rows, int cols);


int equal_count(int *row, int cc);

int main(void)
{
	int i, j, n, m;

	cin >> n >> m;
	int *a = new int[n];


	int **matrix = new int*[n];
	for (i = 0; i < n; i++)
		*(matrix + i) = new int[m];


	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++) 
			cin >> *(*(matrix + i) + j);

	// для каждой строки найдем количество одинаковых элементов
	// и сохраним найденные значения в массиве a
	for (i = 0; i < n; i++)	// цикл по строкам
	{
		a[i] = equal_count(matrix[i], m);
		cout << a[i] << " " << endl;
	}

	for(i = 0; i < (n-1); i++)
	{

		int max_elem_index = 0;
		for(j = 0; j < (n - i); j++)
		{
			if (a[j] > a[max_elem_index])
				max_elem_index = j;
		}


		int tmp = a[n-1-i];
		a[n-1-i] = a[max_elem_index];
		a[max_elem_index] = tmp;

		int *row = matrix[n-1-i];
		matrix[n-1-i] = matrix[max_elem_index];
		matrix[max_elem_index] = row;
	}
	
	show_matrix(matrix, n, m);

	return 0;
}


void show_matrix(int **matrix, int rows, int cols)
{
	for(int i = 0; i < rows; i++)
	{
		for(int j = 0; j < cols; j++)
		{
			cout << matrix[i][j] << " ";
		}
		cout << endl;
	}
}


int equal_count(int *row, int cc)
{
	int max_count = 0;


	for(int i = 0; i < cc; i++)	
	{
		int curr_count = 0;
		for(int j = 0; j < cc; j++)
		{
			if (row[i] == row[j]) 
			{
				curr_count++;
			}
		}
		

		if (curr_count > max_count)
			max_count = curr_count;
	}
	
	return max_count;
}
Правиряй быстрее, ща рабочий день кончится ))
nikmoon вне форума Ответить с цитированием
Старый 25.11.2013, 14:22   #28
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

nikmoon, да, ситуации разные бывают. Поэтому, автору топика на месте надо разбираться, что и как делать. Да и по поводу спора, зачем же спорить, когда можно попросить о КОНСУЛЬТАЦИИ. показать, что Вы нашли проблему в условии, когда в решении может быть НЕСКОЛЬКО корректных ответов. Попросить подсказку, как можно выбрать ту матрицу, которая пройдёт тест.
Вполне допускаю, что препод нормальный человек, а не твердолобый тупица, он поймёт, о чём идёт речь и, как минимум зачтёт у автора топика решение. Как максимум - исправит ситуацию с некорректной проверкой.
В любом случае, TC на конфликт с преподом лучше не идти!


p.s. кстати, по двум предложенным "верным" матрицам, лично я не увидел закономерности, почему ТАК, а не иначе..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2013, 14:27   #29
Baburek
Форумчанин
 
Аватар для Baburek
 
Регистрация: 12.12.2010
Сообщений: 205
По умолчанию

Цитата:
Правиряй быстрее, ща рабочий день кончится ))
Золотые слова :-D
Baburek вне форума Ответить с цитированием
Старый 25.11.2013, 14:30   #30
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от Baburek Посмотреть сообщение
Золотые слова :-D
А то ))
Все, ушел. Вернусь не скоро.
nikmoon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Укажите ошибку С++ ELaX Помощь студентам 8 25.11.2013 13:13
Укажите ошибку bad9 Помощь студентам 3 11.06.2012 03:23
укажите на ошибку маГГ85 JavaScript, Ajax 2 23.02.2012 13:15
Укажите на ошибку. Wh15per Общие вопросы C/C++ 2 27.12.2011 20:02
Укажите ошибку kerbeross PHP 7 25.08.2009 21:47