Как найти все перестановки n-значного числа без использования массива или функции в C ++ - PullRequest
0 голосов
/ 21 сентября 2018

У меня проблемы с тем, чтобы этот код работал так, как я хочу.Задача состоит в том, чтобы написать программу, которая печатает все числа, полученные путем перестановки цифр от 1 до n для введенного числа n (1 <= n <= 9).Программа также должна распечатать, сколько таких номеров.Я сделал цикл for, который получает факториал n, чтобы я мог получить число перестановок, и я объединяю все числа от 1 до n в одно целое число, потому что я думаю, что должен быть способ найти перестановки таким образом.Итак, мой вопрос, как я могу найти эти перестановки? </p>

#include <iostream>
using namespace std;

int main(){
    int n;
    int j;
    int r=0;
    int t=1;
    double f=1;

    cin>>n;

    for(int p=1;p<=n-1;p++){
        t=t*10;
    }

    int u=t;
    //calculates the factorial of n
    for(int o=1;o<=n;o++){
        f=f*o;
    }

    //writes numbers from 1 to n into an integer
    for(int d=1;d<=n;d++){
        j=d*u;
        r=r+j;
        u=u/10;
    }
}

1 Ответ

0 голосов
/ 21 сентября 2018

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

int number;
if (!(std::cin >> number)) {
    // Failure to read number. Do some diagnostic.
    throw std::runtime_error("invalid number");
}

// Number read successfully. Write it to a string.
std::string s = std::to_string(number);

Первая перестановка - это отсортированная перестановка всех цифр.Это легко получить, используя std::sort.

std::sort(s.begin(), s.end());

Наконец, используйте std::next_permutation, чтобы получить другие перестановки.Как только он получит последний, он вернет false и выйдет из цикла.

int n{0};
do {
    ++n;
    std::cout << s << '\n';
} while (std::next_permutation(s.begin(), s.end()));

std::cout  << "Number of permutations: " << n;

Живой пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...