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

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

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

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

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

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

Подсчитать максимальное количество подряд идущих отрицательных элементов. C++
Найти наименьшее количество одинаковых, идущих подряд элементов C++
C++ Определить максимальное количество подряд идущих положительных элементов последовательности, не прерываемых ни нулями, ни отрицательными элементами
C++ Определить максимальное количество подряд идущих положительных элементов массива, не прерываемых ни нулями, ни отрицательными элементами
Подсчитать максимальное количество идущих подряд одинаковых элементов в одномерном массиве. C++
Найти максимальное количество простых чисел, идущих подряд C++
Найти максимальное количество подряд идущих чётных элементов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
24.10.2012, 20:32     Найти максимальное количество подряд идущих минимальных элементов из данного набора #2
Пример можно?
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).
Thinker
Эксперт C++
4220 / 2194 / 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;
}
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 будет содержаться самое большое количество повторяющихся мин элементов подряд
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.10.2012, 21:26     Найти максимальное количество подряд идущих минимальных элементов из данного набора #6
MrGrig, сопряжено с выходом за границы массива, поэтому иногда с аварийной ситуацией.
Beregond
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 13
25.10.2012, 02:32  [ТС]     Найти максимальное количество подряд идущих минимальных элементов из данного набора #7
Thinker,
А можно тоже самое только с вводом к-ва элементов
и с вводом массива.
а то я сам пробовал но фатально(
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]);
Croessmah
Модератор
Эксперт CЭксперт С++
12731 / 7191 / 802
Регистрация: 27.09.2012
Сообщений: 17,738
Записей в блоге: 2
Завершенные тесты: 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) будет производиться чтение памяти уже за пределами массива, если там вдруг окажется значение равное минимуму, то и дальше пойдет =)
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))
Thinker
Эксперт C++
4220 / 2194 / 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. Ну а если это не так, то все же есть правило хорошего тона в программировании:-)
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2012, 17:24     Найти максимальное количество подряд идущих минимальных элементов из данного набора
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
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;
}
Yandex
Объявления
25.10.2012, 17:24     Найти максимальное количество подряд идущих минимальных элементов из данного набора
Ответ Создать тему
Опции темы

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