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

массив целых чисел - C++

Восстановить пароль Регистрация
 
madchen
0 / 0 / 0
Регистрация: 23.11.2010
Сообщений: 16
17.07.2011, 18:51     массив целых чисел #1
помогите кто сделать пожалуйста
Дан массив целых чисел. Рассмотреть отрезки массива(группы идущих подряд чисел), состоящие из нечетных чисел. Получить наибольшую из длин рассматриваемых отрезков. Поиск максимума и минимума.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2011, 18:51     массив целых чисел
Посмотрите здесь:

Сформировать одномерный массив целых чисел, используя датчик случайных чисел, и распечатать массив. Удалить из массива все элементы, совпадающие с его C++
C++ Дан массив целых чисел,произвести для него следующие операции: для каждого из чисел ,входящего в массив,указать,сколько раз оно входит в массив...
Сформировать одномерный массив целых чисел, используя датчик случайных чисел C++
C++ 2)Дан массив из N целых чисел. Получить из него массив отрицательных чисел и отсортировать его по возрастанию методом выбора
C++ 2)Дан массив из N целых чисел. Получить из него массив отрицательных чисел и отсортировать его по возрастанию методом выбора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
17.07.2011, 21:29     массив целых чисел #2
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
#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    const int SIZE = 100;
    vector <int> v;
    for (int i = 0; i < SIZE; i++)
        v.push_back(rand()%100 + 1);
    vector <int> l(SIZE, 0);
    l[0] = v[0]%2 ? 1 : 0;
    for (int i = 1; i < SIZE; i++)
        if (v[i]%2)
            l[i] = l[i-1]+1;
    int maxLength = 0;
    int index = 0;
    for (int i = 0; i < SIZE; i++)
        if(l[i] > maxLength)
        {
            maxLength = l[i];
            index = i-maxLength;
        }
    cout << "ГЌГ*èáîëüøГ*Гї äëèГ*Г*Г*: " << maxLength << endl;
    cout << "Âîò Г®Г*Г*: " << endl;
    for (int i = index+1; i < index+maxLength; i++)
        cout  << v[i] << " ";
    cout << endl;
    
    return 0;   
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
17.07.2011, 21:45     массив целых чисел #3
Как на счёт этого.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
 
// поиск самого большого отрезка не чётных символов
void    max_group(int* arr, int size,  int& first, int& last) {
     int  tmp = 0, cnt = 0, pos = 0;
     const int*  iter   = arr;
     const int*  end   = arr + size;
     do {
          if( *iter % 2)
               cnt++;
          else {
               if(cnt > tmp) {
                    tmp = cnt;
                    pos = ~(arr - iter) + 1;
               }
               cnt = 0;
          }
         *iter++;
      } while(iter != end);
      first   = pos - tmp;
      last   = pos;
}
 
// максимум 
int  _max(const int* arr, int size) {
     const int* end = arr + size;
     int tmp           = *arr;
     do {
         if(*arr > tmp)
                tmp = *arr;
        *arr++;
     } while( arr != end );
     return  tmp;
}
 
// минимум
int  _min(const int* arr, int size) {
     const int* end = arr + size;
     int tmp           = *arr;
     do {
         if(*arr < tmp)
               tmp = *arr;
         *arr++;
      } while( arr != end );
      return  tmp;
}
 
 
 
 
 
void   main(void) {
 
     int  i;
 
     int  arr[14]  = {  8,    5, 1, 3,    2,   33,    2,     77,  15, 33, 7, 81,    8, 99 };
     int  start;
     int  end;
     max_group(arr, sizeof(arr) / sizeof(int),  start, end);
 
     for(i = start; i < end; i++)
            printf("%d, ",  arr[i] );
 
     putc('\n', stdout);
     printf("min = %d\n",   _min(arr, sizeof(arr) / sizeof(int)) );
     printf("max = %d\n",  _max(arr, sizeof(arr) / sizeof(int)) );
 
   getchar();
}
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
18.07.2011, 01:25     массив целых чисел #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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
 
 
bool IsOdd_1 (int x, int y){return ((x%2) && !(y%2));}
bool IsOdd_0 (int x, int y){return (!(x%2) && (y%2));}
 
int main(){
 
 int a[] = {5, 57, 10, 28, 20, 45, 51, 35, 23, 8, 5, 25, 10, 10, 90,  80, 1, 3, 5, 7};
 
 //Вспомогательный вектор
 vector <int> vec (a, a+ sizeof(a)/sizeof(int));
 vec.insert (vec.begin (), 2);
 vec.push_back (2);
 
 vector<int>:: iterator p_, p, temp;
 temp= p= p_= vec.begin();
 
 //А это вектор, состоящий из длин
 vector<int> dlini ;
 
 //НАходим длины и кидаем в вектор
 do {
  p= adjacent_find (vec.begin ()+ (p-  temp), vec.end (), IsOdd_0); 
  p_= adjacent_find(vec.begin ()+ (p_- temp), vec.end (), IsOdd_1); 
  dlini.push_back (p_++- p);
 }
 while (p++!= vec.end ()) ; 
 
 //НАходим максимум
 cout<< "max= "<< *max_element (dlini.begin(), dlini.end());
 getchar ();
 
// adjacent_find 
};
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.07.2011, 01:32     массив целых чисел #5
deleted
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
18.07.2011, 02:02     массив целых чисел #6
А ну да
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
34
35
36
37
38
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
 
 
bool IsOdd_1 (int x, int y){return ((x%2) && !(y%2));}
bool IsOdd_0 (int x, int y){return (!(x%2) && (y%2));}
 
int main(){
 
 int a[] = {5, 57, 10, 28, 20, 45, 51, 35, 23,17, 8, 5, 25, 10, 10, 90,  80, 1, 3, 5, 7};
 
 //Вспомогательный вектор
 vector <int> vec (2,2);
 vec.insert (vec.begin()+ 1, a, a+ sizeof(a)/sizeof(int));
 
 vector<int>:: iterator p_, p, temp;
 temp= p= p_= vec.begin();
 
 //А это вектор, состоящий из длин
 vector<int> dlini ;
 
 //НАходим длины и кидаем в вектор
 do {
  p= adjacent_find (vec.begin ()+ (p-  temp), vec.end (), IsOdd_0); 
  p_= adjacent_find(vec.begin ()+ (p_- temp), vec.end (), IsOdd_1); 
  dlini.push_back (p_++- p);
 }
 while (p++!= vec.end ()) ; 
 
 //НАходим максимум
 cout<< "max= "<< *max_element (dlini.begin(), dlini.end());
 getchar ();
 
};


Добавлено через 13 минут
А вот можно обойтись без дополнительной переменной temp/ Зачем плодить лишние сущности?
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
34
35
36
37
38
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
 
 
bool IsOdd_1 (int x, int y){return ((x%2) && !(y%2));}
bool IsOdd_0 (int x, int y){return (!(x%2) && (y%2));}
 
int main(){
 
 int a[] = {5, 57, 10, 28, 20, 45, 51, 35, 23,17, 8, 5, 25, 10, 10, 90,  80, 1, 3, 5, 7, 9, 57};
 
 //Вспомогательный вектор
 vector <int> vec (2,2);
 vec.insert (vec.begin()+ 1, a, a+ sizeof(a)/sizeof(int));
 
 vector<int>:: iterator p_, p, temp;
 p= p_= vec.begin();
 
 //А это вектор, состоящий из длин
 vector<int> dlini ;
 
 //НАходим длины и кидаем в вектор
 do {
  p= adjacent_find (p, vec.end (), IsOdd_0); 
  p_= adjacent_find(p_, vec.end (), IsOdd_1); 
  dlini.push_back (p_++- p);
 }
 while (p++!= vec.end ()) ; 
 
 //НАходим максимум
 cout<< "max= "<< *max_element (dlini.begin(), dlini.end());
 getchar ();
 
};
Добавлено через 5 минут
Можно заполнение сделать одним оператором
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
34
35
36
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
 
 
bool IsOdd_1 (int x, int y){return ((x%2) && !(y%2));}
bool IsOdd_0 (int x, int y){return (!(x%2) && (y%2));}
 
int main(){
 
 int a[] = {5, 57, 10, 28, 20, 45, 51, 35, 23,17, 8, 5, 25, 10, 10, 90,  80, 1, 3, 5, 7, 57, 13 };
 
 //Вспомогательный вектор
 vector <int> vec (2,2);
 vec.insert (vec.begin()+ 1, a, a+ sizeof(a)/sizeof(int));
 
 vector<int>:: iterator p_, p;
 p= p_= vec.begin();
 
 //А это вектор, состоящий из длин
 vector<int> dlini ;
 
 //НАходим длины и кидаем в вектор
 do {
  dlini.push_back ((p_= adjacent_find(p_, vec.end (), IsOdd_1))++- (p= adjacent_find (p, vec.end (), IsOdd_0)));
 }
 while (p++!= vec.end ()) ; 
 
 //НАходим максимум
 cout<< "max= "<< *max_element (dlini.begin(), dlini.end());
 getchar ();
 
};
Yandex
Объявления
18.07.2011, 02:02     массив целых чисел
Ответ Создать тему
Опции темы

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