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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.63
Tattoquardas
0 / 0 / 0
Регистрация: 22.10.2011
Сообщений: 21
#1

Пилообразная последовательность - C++

23.09.2012, 01:51. Просмотров 2636. Ответов 5
Метки нет (Все метки)

Последовательность a1, a2, a3, … , an-1, an называется пилообразной, если она
удовлетворяет одному из следующих условий:
1) a1 < a2 > a3 < … > an-1 < an
2) a1 > a2 < a3 > … < an-1 > an
Дана числовая последовательность. Требуется определить длину самой
длинной ее пилообразной непрерывной подпоследовательности.
при первом условии работает нормально, при втором - нет. Помогите найти ошибку!

Вот код, написан мной:

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 <iostream>
using namespace std;
 
int main() {
    cout<<"Enter the number of elements: ";
    int n;
    cin>>n;
    cout<<"Enter the elements: "<<endl;
    int arr[n];
    int p=0;
    while (p!=n) {
          cin>>arr[p];
          p++;
          }
    int m=0;
    int i=0;
    int len=0;
    while (i!=n){
          if (((arr[i]>arr[i+1])&&(arr[i]>arr[i-1]))||((arr[i]<arr[i+1])&&(arr[i]<arr[i-1]))){
             m++;
             if (len<m) {len=m;}
             i++;
             cout<<m<<endl;
             }
          else {
               m=0;
               i++;
               }
          }
          cout<<"The length of the longest chain: "<<len<<endl;
          system("pause");
          return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2012, 01:51     Пилообразная последовательность
Посмотрите здесь:

Пилообразная последовательность - C++
Последовательность a1, a2, a3, … , an-1, an называется пилообразной, если она удовлетворяет одному из следующих условий: 1) a1 &lt; a2 &gt;...

Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами - C++
Здравствуйте, уже несколько дней мучаюсь над такой задачей : &quot;Имеется литерная последовательность, состоящая из не более чем 30 ...

Пилообразная последовательность - Pascal
Задача: Последовательность a1, a2, a3, … , an-1, an называется пилообразной, если она удовлетворяет одному из следующих условий: 1) a1 &lt;...

Пилообразная последовательность - Turbo Pascal
Последовательность a1, a2, a3, … , an-1, an называется пилообразной, если она удовлетворяет одному из следующих условий: 1) a1 &lt; a2 &gt; a3...

"Пилообразная" последовательность чисел - Turbo Pascal
2.Дано целое число n (3 to 10^6) и N вещественных чисел. Выяснить, является ли последовательность пилообразной(каждый элемент,имеющий 2...

Пилообразная форма ЭДС Multisim - Электротехника
Помогите пожалуйста, как сделать пилу из того что на осциллографе?

Определить изображение функции времени (пилообразная функция) - MathCAD
Есть вот такое вот задание, которое нужно решить в MathCAD. Если кто-то в этом разбирается, подскажите, откуда ноги растут или где...

Дана последовательность целых чисел. Получить новую последовательность. - C++ Builder
Помогите решить задачу! Дана последовательность целых чисел a1, a2, …, an (n&lt;=40). Получить новую последовательность, выбросив из...

дана последовательность целых чисел a=(a1,a2,.,an). Получите новую последовательность, выбросив из исходной элементы со значением max (a1,a2,.,an - MathCAD
дана последовательность целых чисел a=(a1,a2,....,an). Получите новую последовательность, выбросив из исходной элементы со значением max...

Для каждого из чисел, входящих в последовательность, выяснить, сколько раз оно входит в эту последовательность - C#
Помогите задачу написать на С#

Вводится последовательность из N целых чисел, отличных от нуля. Определить, сколько раз последовательность меняет знак - Pascal
Вводится последовательность из N целых чисел, отличных от нуля. Определить, сколько раз последовательность меняет знак. паскаль:)

Дана последовательность действительных чисел . Вставить действительное число b в нее так, чтобы последовательность осталась неубывающей - VBA
Здравствуйте! Ребят, помогите ещё разок кипятильнику. Задачка такая: Дана последовательность действительных чисел. Вставить...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cmath
Модератор
2432 / 1651 / 133
Регистрация: 11.08.2012
Сообщений: 3,282
Завершенные тесты: 5
23.09.2012, 03:55     Пилообразная последовательность #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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
using namespace std;
 
int main() 
{
      setlocale(LC_ALL, "Russian"); // используйте для работы с символами русского алфавита
 
      cout<< "Введите количество элементов: ";
      int n;
      cin >> n;
 
      cout<< "Введите элементы: " << endl;
 
      int arr[n];
      int p = 0;
 
      while (p != n) 
      {
               cin >> arr[p];
               p++;
      }
 
      int m = 0;
      int i = 0;
      int len = 0;
 
      while (i != n)
      {
               if ( ((arr[i] > arr[i+1]) && (arr[i] > arr[i-1])) || 
                    ((arr[i] < arr[i+1]) && (arr[i] < arr[i-1]))        
                  )
               {
                     m++;
                     if (len < m) {len = m;}
                     i++;
                     cout << m << endl;
               }
               else 
               {
                     m=0;
                     i++;
               }
      }
 
      cout << "Длина самой длинной подпоследовательности: " << len << endl;
      system("pause");
      return 0;
}
Вот, переписал с тегами. Можно и разбирать начать.

Добавлено через 12 минут
Теперь, собственно, по вашему коду (считаю ввод корректным):
Вы проверяете оба условия в одном условном операторе! Разве это верно? Если я правильно понял, то она (подпоследовательность) не может одновременно удовлетворять обоим условиям сразу. Это и есть ошибка. Кроме этого:
Цитата Сообщение от Hydrogen Посмотреть сообщение
C++
1
cout << m << endl;
это вам зачем? Хоть это и не так критично, как предыдущее, сие не есть хорошо.

Добавлено через 2 минуты

Не по теме:

З.Ы. теги юзайте! Правильное оформление задачи сильно поможет человеку, который в ней будет разбираться

Tattoquardas
0 / 0 / 0
Регистрация: 22.10.2011
Сообщений: 21
23.09.2012, 22:52  [ТС]     Пилообразная последовательность #3
даже если проверять по отдельности , все равно не работает. первое условие - нормально, второе - с ошибками...
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
23.09.2012, 23:21     Пилообразная последовательность #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
#include <iostream>
 using namespace std;
 
 int main() {
 cout<<"Enter the number of elements: ";
 int n;
 cin>>n;
 cout<<"Enter the elements: "<<endl;
 int arr[n];
 int p=0;
 while (p!=n) {
 cin>>arr[p];
 p++;
 }
 int m=0;
 int i=1;
 int len=-2;
 while (i<n-1){
 if (((arr[i]>arr[i+1])&&(arr[i]>arr[i-1]))||((arr[i]<arr[i+1])&&(arr[i]<arr[i-1]))){
 m++;
 if (len<m) {len=m;}
 i++;
 //cout<<m<<endl;
 }
 else {
 m=0;
 i++;
 }
 }
 cout<<"The length of the longest chain: "<<len+2<<endl;
 system("pause");
 return 0;
 }
cmath
Модератор
2432 / 1651 / 133
Регистрация: 11.08.2012
Сообщений: 3,282
Завершенные тесты: 5
24.09.2012, 03:47     Пилообразная последовательность #5
Цитата Сообщение от Tattoquardas Посмотреть сообщение
даже если проверять по отдельности , все равно не работает. первое условие - нормально, второе - с ошибками...
Надо начинать проверку не с первого (в смысле нулевого) элемента, а со второго (индекс i=1). Когда вы пишите, что a[i]<a[i-1] при нуле ерунда получается. Кроме того, у вас элементов n, а не n+1

Цитата Сообщение от valeriikozlov Посмотреть сообщение
int len=-2;
valeriikozlov,
З.Ы. Tattoquardas, короч используйте код valeriikozlov. Сие очень верное решение (особенно с len=-2, сам проглядел, что длину неправильно ваша ,Tattoquardas, программа считает)
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
24.09.2012, 06:47     Пилообразная последовательность #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
39
40
41
42
43
44
45
#include <iostream>
 
 
bool less( const int a, const int b ) {
   return a < b;
}
bool larger( const int a, const int b ) {
   return a > b;
}
 
int main() {
   bool ( *cmp[ 2 ] )( const int, const int ) = { less, larger };
   bool currentCmp; 
   std::size_t size = 10,
               max = 2,
               current = 2;
   
   int *arr = new int [ size ];
   
   for ( std::size_t i = 0; i < size; i++ )
      std::cout << ( arr[ i ] = std::rand() % size ) << ' ';
      
   std::cout << std::endl;
   
   currentCmp = arr[ 0 ] < arr[ 1 ];
   
   for ( std::size_t i = 2; i < size; i++ ) {
      if (( *cmp[ currentCmp ])( arr[ i - 1 ], arr[ i ])) {
         current++;
         currentCmp = !currentCmp;
      } else {
         if ( current > max )
            max = current;
         
         current = 2;
      }
   }
 
   if ( current > max )
      max = current;
   
   std::cout << max << std::endl;
   
   return 0;
}
Единственно будет выдавать 2 при случае, когда все элементы последовательности равны.
Yandex
Объявления
24.09.2012, 06:47     Пилообразная последовательность
Ответ Создать тему
Опции темы

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