Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Упорядочение последовательности / 8 сообщений из 8, страница 1 из 1
03.04.2016, 14:12
    #39206843
Упорядочение последовательности
Доброго дня!

помогите, пожалуйста, решить такую задачу.


Дана последовательность отсчетов, представляющих собой пары (int Х : int Y). Отсчеты упорядочены по значениям Х.
В этой последовательности могут встречаться непрерывные подпоследовательности, состоящие из идентичных отсчетов. Идентичные отсчеты имеют одинаковые значения Y.

Проредить исходную последовательность следующим образом:
В каждой подпоследовательности идентичных отсчетов оставить только первый и последний отсчеты, а так же каждый n-ный отсчет (n > 2).

Вывести на экран исходную последовательность и результат.
C++. консольное приложение
Входные данные задаются непосредственно в тексте программы (жесткое кодирование).

Пример.
Исходная: (1, 10) (2, 11) (3, 11) (4, 11) (5, 11) (6, 10) (7, 11) (8, 11) (9, 11) (10, 11) (11, 11) (12, 11) (13, 11) (14, 10)
Результат при n = 3: (1, 10) (2, 11), (4, 11), (5, 11) (6, 10) (7, 11) (9, 11) (12, 11) (13, 11) (14, 10)
Результат при n = 4: (1, 10) (2, 11), (5, 11) (6, 10) (7, 11) (10, 11) (12, 11) (11, 10)


C уважением,
Марина
...
Рейтинг: 0 / 0
03.04.2016, 15:23
    #39206867
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядочение последовательности
Марина, а твой вариант где?
...
Рейтинг: 0 / 0
03.04.2016, 19:27
    #39206952
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядочение последовательности
Марина НегинаВходные данные задаются непосредственно в тексте программы (жесткое кодирование).Впервые вижу, чтобы «hardcode» переводили на русский как «жёсткое кодирование» :).

Марина НегинаПример.
Исходная: (1, 10) (2, 11) (3, 11) (4, 11) (5, 11) (6, 10) (7, 11) (8, 11) (9, 11) (10, 11) (11, 11) (12, 11) (13, 11) (14, 10)
Результат при n = 3: (1, 10) (2, 11), (4, 11), (5, 11) (6, 10) (7, 11) (9, 11) (12, 11) (13, 11) (14, 10)
Результат при n = 4: (1, 10) (2, 11), (5, 11) (6, 10) (7, 11) (10, 11) (12 , 11) ( 11 , 10)Если при n = 4 результат всё-таки такой:
(1, 10) (2, 11) (5, 11) (6, 10) (7, 11) (10, 11) (13 , 11) ( 14 , 10)
то попробуйте так:
Код: plaintext
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.
#include <assert.h>
#include <stdio.h>

// количество элементов в массиве
#define LEN(array) static_cast<int>(sizeof(array) / sizeof(array[0]))

struct sample_t {
  int x, y;
};

void print_sample(const sample_t* sample) {
  printf("(%i, %i) ", sample->x, sample->y);
}

void filter_samples(const sample_t samples[], int samples_count, int equal_rate) {
  // проверяем входные данные
  assert(samples_count >= 0);
  assert(equal_rate >= 1);

  int equal_range_len = 0;
  for (int i = 0; i < samples_count; i++) {
    bool same_as_prev = ((i - 1 >= 0) && (samples[i].y == samples[i - 1].y));
    if (same_as_prev) {
      equal_range_len++;
      bool same_as_next = ((i + 1 < samples_count) && (samples[i].y == samples[i + 1].y));
      if ((equal_range_len % equal_rate == 0) || !same_as_next) {
        print_sample(&samples[i]);
      }
    } else {
      equal_range_len = 1;
      print_sample(&samples[i]);
    }
  }
  printf("\n");
}

int main() {
  // исходная последовательность
  const sample_t samples[] = {{1, 10}, {2, 11}, {3, 11}, {4, 11}, {5, 11}, {6, 10}, {7, 11}, {8, 11}, {9, 11}, {10, 11}, {11, 11}, {12, 11}, {13, 11}, {14, 10}};

  // выводим исходную последовательность
  for (int i = 0; i < LEN(samples); i++) {
    print_sample(&samples[i]);
  }
  printf("\n");

  filter_samples(samples, LEN(samples), /*equal_rate:*/3);
  filter_samples(samples, LEN(samples), /*equal_rate:*/4);

  return 0;
}

Вариант не самый быстрый, но простой.
...
Рейтинг: 0 / 0
03.04.2016, 20:41
    #39206970
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядочение последовательности
Пётр Седов,

Нарциссизм тут не поощряется
...
Рейтинг: 0 / 0
04.04.2016, 13:01
    #39207449
Упорядочение последовательности
Впервые вижу, чтобы «hardcode» переводили на русский как «жёсткое кодирование» :).

Да, времена меняются, и "хардкор" уже переводится именно так)


Спасибо большое, Петр!

С уважением,

Марина)
...
Рейтинг: 0 / 0
04.04.2016, 13:32
    #39207491
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядочение последовательности
Марина НегинаВпервые вижу, чтобы «hardcode» переводили на русский как «жёсткое кодирование» :).

Да, времена меняются, и "хардкор" уже переводится именно так)


hardcore и hardcode, наверное, разные всё же вещи...
К тому же , слово hardcore весьма многозначно, и многие значения весьма невинны.
...
Рейтинг: 0 / 0
04.04.2016, 13:34
    #39207493
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядочение последовательности
MasterZivhardcore и hardcode, наверное, разные всё же вещи...
Но чтобы заметить это, надо обладать аналитическим складом ума.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.04.2016, 03:42
    #39207971
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упорядочение последовательности
Марина Негина, hardco d e -- это когда данные задаются прямо в коде программы (в данном случае -- в C++-коде), а не грузятся из внешнего источника (из файла, например).
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Упорядочение последовательности / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]