7 / 7 / 3
Регистрация: 22.09.2015
Сообщений: 173
|
|||||||||||
1 | |||||||||||
Найти в матрице единственный элемент противоположного знака по отношению к другим09.05.2016, 00:22. Показов 1142. Ответов 17
Метки нет (Все метки)
Добрый вечер.
Я вас уже стал слишком часто беспокоить, хорошо, однако, кой-какие недостатки исправляю сам. Есть программа, которая работает: она ищет один единственный элемент в матрице, который противоположного знака, чем все остальные. Это значит, что если в матрице NxM все элементы положительные, и один единственный отрицательный (нулей нет, они исключены), то ответ будет: Отрицательный. И наоборот. Но это работает, когда вводимые N и M соответственно небольшие. Когда я ввожу 100000000000000000 и 100000000000000000 (или даже чуть меньшее число), то пишет:
Где ошибка? Вот код:
0
|
09.05.2016, 00:22 | |
Ответы с готовыми решениями:
17
Определить, единственный ли в матрице максимальный элемент За единственный проход по массиву найти неповторяющийся элемент Pure Basic: производительность по отношению к другим языкам Что определяет цену каждой валюты по отношению к другим валютам? |
7 / 7 / 3
Регистрация: 22.09.2015
Сообщений: 173
|
|
09.05.2016, 11:43 [ТС] | 3 |
Попытаюсь еще раз написать требования к программе.
Условие: в заданном прямоугольном массиве все элементы или только положительные, или только отрицательные, кроме одного элемента, у которого противоположный знак чем у других элементов. Написать программу, которая установила бы этот знак. Вывод программы: Положительный или Отрицательный. Условие: размер массива N, M и Aij. (1 < N, M < 10 в степени 18; -10 в степени 6 < Aij < 10 в степени 6). Так как? )) Или это у нас препод немного космический? ))
0
|
09.05.2016, 11:47 | 4 |
Если надо именно реализовать с такими границами, то скорее всего это опечатка.
Алгоритм не изменится всё равно. Можно сделать виртуальный массив, но врядли задание это предусматривает, и длительность поиска также будет нереальная.
0
|
7 / 7 / 3
Регистрация: 22.09.2015
Сообщений: 173
|
|
09.05.2016, 12:17 [ТС] | 6 |
Спасибо за советы, а почему float а не int? Целые числа берем ведь....
0
|
7 / 7 / 3
Регистрация: 22.09.2015
Сообщений: 173
|
||||||
09.05.2016, 14:30 [ТС] | 8 | |||||
Я не добавил, что числа целые, да, все понятно. Спасибо!
Добавлено через 15 минут Запустил программу в системе контестер. И на последнем тесте выдает ошибку: Time limit. То бишь программа работает почти аккуратно, но где здесь подвох? Сравнение числа происходит в том же цикле, что и считывание с клавиатуры. Что бы это могло быть?
Пришел ответ преподавателя. В 7 тесте дана таблица 1000х1000, однако, прошу обратить ваше внимание, что программе уделено всего 0,075 секунд, поэтому самый простой код здесь не уместится во временные рамки. Необходимо придумать оптимально работающий код. Вот как... Добавлено через 7 минут Тут надо поднять новую тему...
0
|
09.05.2016, 14:55 | 9 |
Можно представить двумерный массив как одномерный.
a[row][column] == a[row * column_width + column]. Т.е. для перебора всех элементов достаточно увеличивать указатель на размер 1 элемента. Хотя с динамическими массивами с отдельным созданием подмассивов это не прокатит.
1
|
7 / 7 / 3
Регистрация: 22.09.2015
Сообщений: 173
|
||||||
09.05.2016, 15:33 [ТС] | 10 | |||||
Я это уже где-то видел! Вы не могли бы встроить его вот в этот цикл?...
0
|
7 / 7 / 3
Регистрация: 22.09.2015
Сообщений: 173
|
|||||||||||
09.05.2016, 17:42 [ТС] | 12 | ||||||||||
Переделал программу, но теперь во время запуска кидает вот это:
0
|
7 / 7 / 3
Регистрация: 22.09.2015
Сообщений: 173
|
||||||
09.05.2016, 19:10 [ТС] | 14 | |||||
Заработало!!! Урра!
Пишу код, может кому пригодится!
0
|
Модератор
|
|
09.05.2016, 19:40 | 15 |
Сообщение было отмечено Rius как решение
Решение
Если условие задачи формулируется так: все элементы, кроме одного имеют один и тот же знак, и ровно один имеет противоположный знак, и нужно найти этот противоположный знак (напечатать "положительный" или "отрицательный"), то просматривать весь массив не нужно. Достаточно взять три любых элемента - и все! Возможные случаи:
- все три > 0 -> ответ отрицательный - все три < 0 -> ответ положительный - два > 0, один меньше - ответ отрицательный - два < 0, один больше - ответ положительный Работать это будет очень быстро.
2
|
7 / 7 / 3
Регистрация: 22.09.2015
Сообщений: 173
|
|
09.05.2016, 19:58 [ТС] | 16 |
Я думал об этом, но мысль куда-то затерялась... Так получается, что моя программа может посчитать все положительные и все отрицательные значения. )
Спасибо, за замечание, админ!
0
|
09.05.2016, 20:04 | 18 |
Точно, оказывается координаты самого элемента не нужны по заданию
Поэтому числа такие большие, чтобы намекать на ненужность полного просмотра.
0
|
09.05.2016, 20:04 | |
09.05.2016, 20:04 | |
Помогаю со студенческими работами здесь
18
Найти порядковый номер того из элементов последовательности, который наиболее близок к заданному целому числу (такой элемент единственный). Найти в матрице максимальный элемент и его номера в матрице Найти самый наименьший элемент в матрице, и найти сумму столбца который стоит этот наименьший найденный элемент Найти наибольший элемент в квадратной матрице, удалить из нее строку, содержащую этот элемент Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |