Перебор в числе С++ [требует правки]

339
02 февраля 2017, 01:34

Есть число 2098216. Надо найти количество трехзначных чисел, которые можно создать из цифр этого числа, т.е. 209, 982, 821, 216.

Можно ли это сделать с помощью алгоритма next_premutation? Если нет, то помогите найти другой метод.

Answer 1

идея алгоритма - рассматриваем число наоборот, каждый раз показывая последние три цифры и отбрасывая последнюю

#include <iostream>
using namespace std;
int calc(int n)
{
    int total = 0;
    while (n > 99) {
        int c = n % 1000;
        if (c > 99) {
            cout << c << endl; // закоментировать, если числа не нужны
            total++;
        }
        n = n / 10;
    }
    return total;
}
int main() {
    int n = 2098216;
    cout << "total " << calc(n) << endl;
    return 0;
}

Эту же задачу можно решить и через строковое представление, но мне кажется, это будет переусложнение.

Answer 2

Есть число 2098216. Надо найти количество трехзначных чисел, которые можно создать из цифр этого числа, т.е. 209, 982, 821, 216

Все гораздо проще. Если бы не цифра "нуль", то можно было бы вычислять "выборку с возвращением". В данном же случае можно поступить так:

#include <algorithm>
#include <iostream>
int Calc3(int D) {
  int V[10] = {0};
  for(;D>0;D/=10) V[D%10]=1;
  int N = std::accumulate(std::begin(V),std::end(V),0);
  return (N-V[0])*N*N;
}
int main () {
  std::cout << Calc3(2098216) << std::endl;
  return 0;
}

Вывод:

180

На ideone.

Объяснение решения

  • находим "алфавит", иными словами число уникальных цифр N
  • первый разряд трехзначного числа может принимать N-1 значений, т.к. в цифрах есть нуль
  • остальные разряды трехзначного числа могут принимать N значений каждый

Вывод: число комбинаций равно (N-1) * N * N

READ ALSO
#1452 - Cannot add or update a child row: a foreign key constraint fails

#1452 - Cannot add or update a child row: a foreign key constraint fails

ЗдравствуйтеНе могу понять, почему не импортируется таблица в phpmyadmin

483
Нарушение инкапсуляции в LayoutParams?

Нарушение инкапсуляции в LayoutParams?

Есть такая штука, как LayoutParams, получить можно их у любого вью, например, если он находится в LinearLayout

418
Создание XMLInputFactory StAX

Создание XMLInputFactory StAX

Делаю веб приложение на jsf primefacesСервер WebSphere

442
Паттерн Builder

Паттерн Builder

Во описании шаблона на Вики в классе Builder используются заранее созданные методы buildXXX() для построения разных объектов с одинаковыми значениями...

423