Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
никита007
4 / 4 / 0
Регистрация: 02.02.2010
Сообщений: 29
#1

Дан массив размера N - C++

14.05.2010, 11:31. Просмотров 750. Ответов 6
Метки нет (Все метки)

Дан массив размера N. Найти номер его первого локального минимума.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Maxim Prishchepa
Эксперт С++
1919 / 1031 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
14.05.2010, 12:33     Дан массив размера N #2
так а в чем проблемы то? для меня например в данному задании самая большая проблема - это то, что я не помню, что такое локальный минимум. а дальше как по учебнику 2 цикла и условие поиска.
Sn1pe
11 / 11 / 1
Регистрация: 10.05.2010
Сообщений: 23
14.05.2010, 12:38     Дан массив размера N #3
Если брать из математики локальный минимум - это когда слева элемент больше и справа больше, если не дано никаких других ограничений.
Maxim Prishchepa
Эксперт С++
1919 / 1031 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
14.05.2010, 12:45     Дан массив размера N #4
Цитата Сообщение от Sn1pe Посмотреть сообщение
Если брать из математики локальный минимум - это когда слева элемент больше и справа больше, если не дано никаких других ограничений.
если я правильно понимаю, то эллемент mas[0] и mas[endEl] - никогда не могут быть локальным минимумом? :-)
если да, то вариант решения может быть примерно таким:
C++
1
2
3
4
5
6
7
8
9
10
11
12
const int size = 5;
int mas[size];
for(int i=0;i<size;i++)
   cin>>mas[i]; //защиту от дураков сами реализовывайте
for(int i=1;i<size-1;i++)
{
   if(mas[i-1]>mas[i] && mas[i+1]> mas[i])
   {
      cout<<"Ура!!! МЫ НАШЛИ ЕГО!!! ЕГО НОМЕР:"<<i<<"и является он числом "<<mas[i];
      break;
   }
}
Sn1pe
11 / 11 / 1
Регистрация: 10.05.2010
Сообщений: 23
14.05.2010, 12:56     Дан массив размера N #5
Автор конечно лучший в объяснениях условия задачи
Цитата Сообщение от l_a_m Посмотреть сообщение
если я правильно понимаю, то эллемент mas[0] - никогда не может быть локальным минимумом? :-)
Может быть, если судить в сдравом смысле

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(int argc, char* argv[])
{ const int n=5;
  int a[n],i,need;
  for (i = 0; i < n; i++) {cin >>a[i];}     //ВВод массива, если надо замени
  for (i = 0; i < n; i++)
  { if (i==0) {if (a[1]>a[0]) {need=0; break;}
    } else if (i==n) {if (a[n-1]>a[n]) {need=n; break;}
           }  else
  if ((a[i-1]>a[i]) && (a[i+1]>a[i]))      //При нахождении нужного, выход
  {need=i; break;
    }
    }
    cout <<need;     //Выводит как индекс С++
    getch();
  }
Вот код, если первый и последний тоже могут быть
P.S. проверено в компиляторе
Maxim Prishchepa
Эксперт С++
1919 / 1031 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
14.05.2010, 13:04     Дан массив размера N #6
Цитата Сообщение от Sn1pe Посмотреть сообщение
Автор конечно лучший в объяснениях условия задачи

Может быть, если судить в сдравом смысле

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(int argc, char* argv[])
{ const int n=5;
  int a[n],i,need;
  for (i = 0; i < n; i++) {cin >>a[i];}     //ВВод массива, если надо замени
  for (i = 0; i < n; i++)
  { if (i==0) {if (a[1]>a[0]) {need=0; break;}
    } else if (i==n) {if (a[n-1]>a[n]) {need=n; break;}
           }  else
  if ((a[i-1]>a[i]) && (a[i+1]>a[i]))      //При нахождении нужного, выход
  {need=i; break;
    }
    }
    cout <<need;     //Выводит как индекс С++
    getch();
  }
Вот код, если первый и последний тоже могут быть
P.S. проверено в компиляторе
какой-то сложноватый у вас код получился :-) я могу предложить такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
const int size = 5;
int mas[size];
int result = -1;
for(int i=0;i<size;i++)
   cin>>mas[i]; //защиту от дураков сами реализовывайте
if(mas[0]<mas[1])
   result = 0;
if(result == -1)
{
  for(int i=1;i<size-1;i++)
  {
     if(mas[i-1]>mas[i] && mas[i+1]> mas[i])
     {
        result = i;
        break;
     }
  }
 
if(mas[size-2]>mas[size-1] && result == -1)
   result = size -1;
}
if(result != -1)
   cout<<"Ура!!! МЫ НАШЛИ ЕГО!!! ЕГО НОМЕР:"<<result<<"и является он числом "<<mas[result];
else
  cout<<"СКУШНО!!! ШО ВЫ МНЕ ПОДСУНУЛИ!?!?! НЕТ ТУТ НИКАКИХ МИНИМУМОВ!!! ТЕМ БОЛЕЕ ЛОКАЛЬНЫХ!!!";
хе... правда у меня не красивее получилось... ну в общем, сошлемся на: "какой вопрос, такой и ответ" :-)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2010, 13:07     Дан массив размера N
Еще ссылки по теме:

C++ Дан целочисленный массив размера N. Сжать массив, удалив из него все элементы, модуль которых не превышает 1
Дан целочисленный массив размера N. Сжать массив, удалив из него все элементы, модуль которых не превышает 1 C++
C++ Дан целочисленный массив размера N
C++ Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу:
C++ Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Sn1pe
11 / 11 / 1
Регистрация: 10.05.2010
Сообщений: 23
14.05.2010, 13:07     Дан массив размера N #7
Я и не претендовал на простоту
Просто переделывал свою старую другую прогу и почему-то обычные условия в цикл запихнул
Да уж что смогли по вопросу
Yandex
Объявления
14.05.2010, 13:07     Дан массив размера N
Ответ Создать тему
Опции темы

Текущее время: 01:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru