Member 14143106 Ответов: 4

Пожалуйста, ответьте на этот вопрос в C


1.если задан массив (содержащий не более 1000 положительных целых чисел),найдите второе по величине целое число.Если второго по величине целого числа не существует,верните значение -1.

Входные Характеристики:
Input1:длина массива
Input2:массив положительных целых чисел

Выходная Спецификация:
Верните второе по величине число или -1 соответственно.

#include<stdio.h>
#include<string.h>
// Read only region start

int SecondLargest(int input1,int input2[])
{
// Read only region end
//write code here

Void print2largest(int arr[],int arr_size)
}


Что я уже пробовал:

Я много пробовал,но получал много ошибок

OriginalGriff

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

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

Stefan_Lang

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

Задача, поставленная перед вами, очевидно, включает код вплоть до строки "//Read only region end", поэтому вы на самом деле не предоставили никакого полезного кода вообще.

Я не вижу никаких признаков того, что вы "много пробовали", как вы утверждаете, поскольку вы даже не намекнули на ошибки, которые вы получаете.

Если вы надеетесь, что кто-то даст полный ответ, Нет, мы этого не делаем: вы должны сами делать свою домашнюю работу, потому что только тогда у вас есть шанс действительно чему-то научиться! Мы можем предложить помощь, если вы застряли с проблемой _specific_, но до сих пор вы были настолько неспецифичны, насколько это возможно.

Patrice T

"Я много пробовал,но получал много ошибок"
Покажите свою работу и ошибки, которые вы получаете.

Richard MacCutchan

Вам нужно заполнить раздел, где говорится: //write code here.

Rick York

Нет. Я позволю тебе ответить на этот вопрос.

4 Ответов

Рейтинг:
2

RmcbainTheThird

Хорошо вот один из подходов:
Сортировка массива от наименьшего к наибольшему(используйте google, если вы не знаете, как сортировать массив ints)
Теперь получим предпоследний элемент массива
и вуаля, Боб-это твой дядя.


Stefan_Lang

Похоже на домашнюю работу - просто прочитайте комментарии в прилагаемом коде.
Учитывая простоту задачи, я бы не стал предполагать, что ОП знает, как сортировать (или, по крайней мере, писать или использовать код для сортировки). Не говоря уже о том, что это бессмысленно расточительно.

RmcbainTheThird

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

Stefan_Lang

Я не следую этой логике. Вы хотите сказать, что два цикла for более сложны, чем алгоритм сортировки? Кроме того, после сортировки вы не можете просто взять второе последнее значение - если самое большое значение имеет дубликаты во входном массиве, то второе последнее значение совпадает с последним. Вам придется запустить цикл, чтобы найти первое значение, которое на самом деле меньше..

megaadam

Петля в два раза дешевле, чем сортировка! Но вы также можете сделать это в одном цикле с двумя местными жителями, как показано выше Карстенком.

Stefan_Lang

Конечно. Я только жаловался на то, что Совет по сортировке, вероятно, не подходит для вопроса уровня домашнего задания.

Я действительно имел в виду аналогичное решение, но решил не публиковать его, потому что все еще надеялся, что ОП хотя бы попытается опубликовать что-то стоящее в разделе "Что я пробовал"; -).

RmcbainTheThird

Я вовсе не согласен с тем, что сортировка стоит дорого, и в ретроспективе циклы for-лучшее решение. Я перестал беспокоиться о циклах процессора и нехватке памяти с тех пор, как покинул c около 20 лет назад и встал на подножку .net. Делает человека ленивым.

Stefan_Lang

Без проблем. Разумно использовать один лайнер, когда он работает, и производительность не является проблемой. Я указывал на это только потому, что этот вопрос касается изучения языка, а не изучения того, как быть ленивым на своей повседневной работе ;-)

Рейтинг:
1

megaadam

Может быть, вы привыкли к Java. Во первых вы не можете передать такой массив в C. В C

int arr1[10];
int arr2[20];


Есть два разных типа и arr[] это вообще не тип, поэтому ваш код не компилируется.

Вот пример того, как вы можете передать массив: Передача массива в функцию в программировании на языке Си с примером[^]

Тогда вы можете начать с getLargest(int size, int *arr) ...

Я предлагаю вам избегайте сортировки, стоит много процессора.

Без сортировки вы можете реализовать getSecondLargest(int size, int largest, int *arr) с небольшим размышлением

И вам может понадобиться красивый код и быть последовательным. Не одна функция с верхним регистром и одна с нижним регистром.


Stefan_Lang

int arr[] действительно является допустимой спецификацией параметров функции в C и C++, и это не то же самое, что int *arr! (хотя по большей части он ведет себя так же)

Кстати, приведенный код, по-видимому, был предоставлен вплоть до строки "//Read only region end", и если вы посмотрите вверх, то найдете заголовок функции
SecondLargest инт(инт вход 1,вход 2 инт[])
это совершенно законный код си.

Stefan_Lang

С. П.:
"Не одна функция с верхним регистром и одна с нижним регистром."
Похоже, что один был предоставлен наставником или учителем, но не другим. Не то чтобы это не должно быть последовательным в любом случае, но это принятие желаемого за действительное на этом уровне домашней работы ;-)

CPallini

Держу пари, что это не совсем тот код, который дает репетитор. Или, по крайней мере, я не знаю ни одного преподавателя Си, который бы писал пустота капитализированный.

Stefan_Lang

Вот что я имел в виду, говоря: "один был предоставлен наставником или учителем, но не другим". "Область только для чтения", по-видимому, была предоставлена.

Рейтинг:
1

RugbyLeague

Сортировка массива от наибольшего к наименьшему, а затем итерация по массиву, возвращающая первое число, которое меньше числа в начале массива - если такого числа не существует (т. е. все числа одинаковы), возвращает -1


Stefan_Lang

Хорошо, что вы подумали о возможных дубликатах, но в остальном мой комментарий к решению 1 применим и здесь.

Рейтинг:
0

KarstenK

Не сортируйте массив из-за стоимости, и он не нужен. Пробегитесь по массиву для поиска значения. Установите начальное значение max2 (второе по величине значение) равным -1.

решение довольно простое, когда вы находите новый mxaimum чем max2-это старый максимум.


CPallini

Теперь это решение имеет смысл. Мой 5.