powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Упорядочение последовательности
8 сообщений из 8, страница 1 из 1
Упорядочение последовательности
    #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
Упорядочение последовательности
    #39206867
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марина, а твой вариант где?
...
Рейтинг: 0 / 0
Упорядочение последовательности
    #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
Упорядочение последовательности
    #39206970
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пётр Седов,

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

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


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

С уважением,

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

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


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


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