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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Beregond
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 13
#1

Найти максимальное количество подряд идущих минимальных элементов из данного набора - C++

24.10.2012, 20:22. Просмотров 2057. Ответов 12
Метки нет (Все метки)

Дано целое число N и набор из N целых чисел.
Найти максимальное количество подряд идущих минимальных элементов из данного набора.
Выполнить без применения функций.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2012, 20:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти максимальное количество подряд идущих минимальных элементов из данного набора (C++):

Найти максимальное количество подряд идущих чётных элементов - C++
Мне дана задача : опишите на одном из языков программирования алгоритм подсчета максимального количества подряд идущих четных элементов в...

Найти максимальное количество подряд идущих отрицательных элементов в заданном массиве - C++
Помогите решить задачу: 2. Опишите алгоритм подсчета максимального количества подряд идущих отрицательных элементов в целочисленном...

Подсчитать максимальное количество подряд идущих отрицательных элементов. - C++
Дан одномерный массив А, состоящий из N элементов. Подсчитать максимальное количество подряд идущих отрицательных элементов. Помогите,...

Найти максимальное количество простых чисел, идущих подряд - C++
В последовательности целых чисел найти максимальное количество простых чисел, идущих подряд (программа должна содержать логическую функцию,...

Посчитать максимальное количество подряд идущих отрицательных элементов в целочисленном массиве - C++
3) Посчитайте максимальное количество подряд идущих отрицательных элементов в целочисленном массиве длины 30.

Подсчитать максимальное количество идущих подряд одинаковых элементов в одномерном массиве. - C++
Доброго времени суток. Помогите пожалуйста решить задачу. Подсчитать максимальное количество идущих подряд одинаковых элементов в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
24.10.2012, 20:32 #2
Пример можно?
1
Beregond
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 13
24.10.2012, 20:36  [ТС] #3
Целое число N = 5
Набор N чисел = 1, 2, 3, 1, 1
Минимальное число =1 , а к-во подряд идущих минимальных элементов = 2 (1,1).
0
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.10.2012, 21:16 #4
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
#include<stdio.h>
 
int main()
{
   int a[] = {1, 2, 3, 1, 1, 1}, min, i, max = 0, size, k;
   size = sizeof(a)/sizeof(*a);
   for(min = a[i = 0]; ++i < size; )
      if (a[i] < min) min = a[i];
   i = 0;
   while(i < size)
   {
      k = 0;
      while(i < size && a[i] == min)
      {
         k++;
         i++;
      }
      if (k > max) max = k;
      while(i < size && a[i] != min)
         i++;
   }
   printf("min = %d, max_count = %d\n", min, max);
   return 0;
}
2
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
24.10.2012, 21:20 #5
ястно,
Цитата Сообщение от Beregond Посмотреть сообщение
Дано целое число N
это тогда вообще лучше вычеркнуть а то только мозги парит
сначала находим минимум, уж это надеюсь сможете реализовать далее вот такая функция
C++
1
2
3
4
5
6
7
8
9
10
for(int i=0,n=0,n1=0;i<N;i++){
    if(mas[i]==min){
        while(mas[i++]==min)
            n++;
        if(n>n1){
            n1=n;
            n=0;
        }
    }
}//Соответственно в n1 будет содержаться самое большое количество повторяющихся мин элементов подряд
1
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.10.2012, 21:26 #6
MrGrig, сопряжено с выходом за границы массива, поэтому иногда с аварийной ситуацией.
1
Beregond
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 13
25.10.2012, 02:32  [ТС] #7
Thinker,
А можно тоже самое только с вводом к-ва элементов
и с вводом массива.
а то я сам пробовал но фатально(
0
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 06:27 #8
Цитата Сообщение от Thinker Посмотреть сообщение
MrGrig, сопряжено с выходом за границы массива, поэтому иногда с аварийной ситуацией.
Если даже последним элементом окажется минимальный и i будет больше размерности массива, цикл while просто закончится и цикл for также прекратит действовать ибо i>N.
Цитата Сообщение от Beregond Посмотреть сообщение
А можно тоже самое только с вводом к-ва элементов
C++
1
2
3
4
5
cout<<"Input N ";
cin>>N;
int *a=new int[N];
for(int i=0;i<N;i++)
    cin>>a[i];
Добавлено через 48 секунд
перед тем как завершить действия, по правилам хорошего тона следует сделать еще
C++
1
delete[] a;
Добавлено через 3 минуты
Цитата Сообщение от MrGrig Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
for(int i=0,n=0,n1=0;i<N;i++){
        if(mas[i]==min){
        while(mas[i++]==min)
            n++;
        if(n>n1){
            n1=n;
            n=0;
        }
    }
}
небольшая ошибка тут присутствует, цикл не будет обрабатывать все значения ибо будет проскакивать 1 значение нужно сделать возврат
C++
1
2
3
4
5
6
7
8
9
10
11
for(int i=0,n=0,n1=0;i<N;i++){
        if(mas[i]==min){
        while(mas[i++]==min)
            n++;
        if(n>n1){
            n1=n;
            n=0;
            i--;
        }
    }
}
Добавлено через 5 минут
Цитата Сообщение от MrGrig Посмотреть сообщение
C++
1
2
3
4
5
cout<<"Input N ";
cin>>N;
int *a=new int[N];
for(int i=0;i<N;i++)
    cin>>a[i];
если вы все таки работаете на Си с библеотекой <stdio.h> то лучше так
C++
1
2
3
4
5
printf("Input N ");
scanf("%d",&N);
int *a=new int[N];
for(int i=0;i<N;i++)
    scanf("%d",&a[i]);
1
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,374
Записей в блоге: 3
Завершенные тесты: 1
25.10.2012, 06:44 #9
Цитата Сообщение от MrGrig Посмотреть сообщение
Если даже последним элементом окажется минимальный и i будет больше размерности массива, цикл while просто закончится и цикл for также прекратит действовать ибо i>N.
Зато при
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstdlib>
using std::cout;
 
int main()
{
    const int N=5;
    int mas[N]={1,2,1,1,1};
    int min=1, n1=0;
    for(int i=0, n=0;i<N;i++){
    if(mas[i]==min){
        while(mas[i++]==min)
            n++;
        if(n>n1){
            n1=n;
            n=0;
        }
        }
    }
    cout<<n1<<"\n";
    system("pause");
    return 0;
}
ответ 2.
Исправился =)))

Добавлено через 14 минут
Цитата Сообщение от MrGrig Посмотреть сообщение
Если даже последним элементом окажется минимальный и i будет больше размерности массива, цикл while просто закончится и цикл for также прекратит действовать ибо i>N.
Если последний элемент минимальный, то при while(mas[i++]==min) будет производиться чтение памяти уже за пределами массива, если там вдруг окажется значение равное минимуму, то и дальше пойдет =)
1
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 07:45 #10
Цитата Сообщение от MrGrig Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
for(int i=0,n=0,n1=0;i<N;i++){
* * * * if(mas[i]==min){
* * * * while(mas[i++]==min)
* * * * * * n++;
* * * * if(n>n1){
* * * * * * n1=n;
* * * * * * n=0;
* * * * }
* * }
}

Цитата Сообщение от Croessmah Посмотреть сообщение
Если последний элемент минимальный, то при while(mas[i++]==min) будет производиться чтение памяти уже за пределами массива, если там вдруг окажется значение равное минимуму, то и дальше пойдет =)
Вероятность того что в следующих 4х байтах памяти после массива окажется вдруг число равное минимуму равна наверное 0.0000001% по моему вероятность того что массив запишется в битый байт намного больше...=) но даже чтобы избежать такой ошибки достаточно просто изменить условие while((mas[i++]==min)&&((i+1)<N))
1
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.10.2012, 07:58 #11
Цитата Сообщение от Beregond Посмотреть сообщение
А можно тоже самое только с вводом к-ва элементов
и с вводом массива.
а то я сам пробовал но фатально(
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
26
27
28
29
30
#include<stdio.h>
#include<stdlib.h>
 
int main()
{
   int *a, min, i, max = 0, size, k;
   printf("size = "); scanf("%d", &size);
   a = (int *)malloc(size * sizeof(*a));
   for(i = 0; i < size; i++)
   {
       printf("a[%d] = ", i); scanf("%d", &a[i]);
   }
   for(min = a[i = 0]; ++i < size; )
      if (a[i] < min) min = a[i];
   i = 0;
   while(i < size)
   {
      k = 0;
      while(i < size && a[i] == min)
      {
         k++;
         i++;
      }
      if (k > max) max = k;
      while(i < size && a[i] != min)
         i++;
   }
   printf("min = %d, max_count = %d\n", min, max);
   return 0;
}
MrGrig, никто не застрахован, что следующим после a[n-1] будет элемент со значением min. Ну а если это не так, то все же есть правило хорошего тона в программировании:-)
0
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 08:14 #12
Цитата Сообщение от Thinker Посмотреть сообщение
MrGrig, никто не застрахован, что следующим после a[n-1] будет элемент со значением min. Ну а если это не так, то все же есть правило хорошего тона в программировании:-)
полность согласен =)
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
26
27
28
29
30
#include <iostream>
using namespace std;
 
 
void main(){
    int N,min;
    cout<<"Input N ";
    cin>>N;
    int *a=new int[N],n=0,n1=0,i;
    for(int i=0;i<N;i++)
        cin>>a[i];
    for(min=a[0],i=1;i<N;i++)
        if(min>a[i])
            min=a[i];
    for(i=0;i<N;i++){
        if(a[i]==min){
            while((a[i]==min)&&(i<N)){
                i++;
                n++;
            }
            if(n>n1){
                n1=n;
                n=0;
                i--;
            }
        }
    }
    cout<<"Min value: "<<min<<" Repeate "<<n1<<"count\n";
    delete[] a;
}
0
Beregond
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 13
25.10.2012, 17:24  [ТС] #13
Всем огромное спасибо за помощь =))
Выкладываю окончательно рабочий код программы
(тестировано на Microsoft Visual C++ 2010)

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
26
27
28
29
30
31
32
33
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
  int size,k=0,min=0,max=0,i;
    printf("Input size ");
     scanf("%d",&size);
  int *a=new int[size];
    printf("Input massiv ");
  for(int i=0;i<size;i++)
     scanf("%d",&a[i]);
 
   for(min = a[i = 0]; ++i < size; )
      if (a[i] < min) min = a[i];
   i = 0;
   while(i < size)
   {
      k = 0;
      while(i < size && a[i] == min)
      {
         k++;
         i++;
      }
      if (k > max) max = k;
      while(i < size && a[i] != min)
         i++;
   }
   printf("min = %d, max_count = %d\n", min, max);
    cin.get();
    cin.get();
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2012, 17:24
Привет! Вот еще темы с ответами:

В заданном массиве подсчитать максимальное количество идущих подряд отрицательных элементов - C++
Помогите надо в 27-30 что то изменить чтобы работало Дан одномерный массив А, состоящий из N элементов. Подсчитать мак- симальное...

Определить максимальное количество подряд идущих положительных элементов массива, не прерываемых ни нулями, ни отрицательными элементами - C++
помогите с этой задачей)) Дан линейный вещественный массив a1,a2,..,an. Определить максимальное количество подряд идущих положительных...

Определить максимальное количество подряд идущих положительных элементов последовательности, не прерываемых ни нулями, ни отрицательными элементами - C++
Дана вещественная таблица а,...,а. Определить максимальное количество подряд идущих положительных элементов последовательности, не...

Найти количество минимальных элементов из данного набор чисел - C++
Дано целое число N и набор из N целых чисел. Найти количество минимальных элементов из данного набора.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.10.2012, 17:24
Ответ Создать тему
Опции темы

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