Последовательные числа вида 2 ^ {p} 3 ^ {q} - PullRequest
0 голосов
/ 04 февраля 2020

Итак, мне задают этот вопрос: множество S состоит из чисел вида 2<sup>p</sup> × 3<sup>q</sup>, где p и q - неотрицательные целые числа. Последовательность A содержит элементы набора S в порядке убывания. первые несколько элементов A:


 A[0]=1  
 A[1]=2
 A[2]=3
 A[3]=4
 A[4]=6
 A[5]=8
 A[6]=9
 A[7]=12

написать функцию:

int solution(int N)

затем она должна вернуть A[N]. Вопрос в том, может ли кто-нибудь объяснить мне этот вопрос, потому что я не понимаю, или если у кого-то есть какой-то код, на который я могу посмотреть в c ++

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Ни эффективное, ни умное решение, которое, однако, является хорошей отправной точкой.

  1. Слепое создание массива решений путем выборки p и q.
  2. Сортировка массива .
  3. Удалить избыточные элементы из массива.
  4. Получить элемент nth.
#include <math.h>
#include <algorithm>
#include <iostream>
#include <memory>
#include <vector>

int solution(int n) {
  int p_max = n + 1;
  int q_max = n + 1;
  std::vector<int> res(p_max * q_max);
  for (int p = 0; p < p_max; p++) {
    for (int q = 0; q < q_max; q++) {
      res.at(q * n + p) = std::pow(2, p) * std::pow(3, q);
    }
  }
  std::sort(res.begin(), res.end());
  auto new_end = std::unique(res.begin(), res.end());
  res.resize(std::distance(res.begin(), new_end));
  return res.at(n);
}

Попробуйте онлайн!

0 голосов
/ 04 февраля 2020

Set S состоит из чисел вида 2<sup>p</sup> × 3<sup>q</sup>, где p и q являются неотрицательными целыми числами.

Что это означает, что у вас есть набор чисел, где все числа генерируются из степеней, кратных 2 или 3.

1 (2^0 * 3^0), 2 (2^1 * 3^0), 4 (2^2 * 3^0), 3 (2^0 * 3^1), 6(2^1 * 3^1), 12(2^2 * 3^1), ...

Это набор данных, который вы используете.

Последовательность A содержит элементы множества S в порядке возрастания

Это означает, что у вас есть массив с именем A (по крайней мере, для предположения вопроса), который содержит все элементы S в порядке возрастания, то есть

1, 2, 3, 4, 6, 8, 9, 12, 16, ...

написать функцию:

int solution(int N)

затем она должна вернуть A[N]

Это означает, что ваша функция solution должен вернуть значение элемента в A в позиции N. Например, если N было 5, то должно возвращаться 8, поскольку это элемент 5 th .

...