Есть число 2098216. Надо найти количество трехзначных чисел, которые можно создать из цифр этого числа, т.е. 209, 982, 821, 216.
Можно ли это сделать с помощью алгоритма next_premutation
? Если нет, то помогите найти другой метод.
идея алгоритма - рассматриваем число наоборот, каждый раз показывая последние три цифры и отбрасывая последнюю
#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;
}
Эту же задачу можно решить и через строковое представление, но мне кажется, это будет переусложнение.
Есть число 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-1) * N * N
Виртуальный выделенный сервер (VDS) становится отличным выбором
ЗдравствуйтеНе могу понять, почему не импортируется таблица в phpmyadmin
Есть такая штука, как LayoutParams, получить можно их у любого вью, например, если он находится в LinearLayout
Во описании шаблона на Вики в классе Builder используются заранее созданные методы buildXXX() для построения разных объектов с одинаковыми значениями...