Перестановки строки из четырех символов, состоящей только из цифр 0-9 - PullRequest
0 голосов
/ 11 декабря 2018

Здравствуйте, спасибо, что прочитали мой вопрос.Я надеялся выяснить, как хранить все возможные перестановки строки из 4 символов, состоящей только из цифр, может быть повторение.

char str[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

sort(begin(str), end(str));
do{
    cout << str[0] << ' ' << str[1] << ' ' << str[2] << ' ' << str[3] << '\n';
}while(next_permutation(begin(str), end(str)));

Код выше - это то, что у меня есть сейчас.Он печатает перестановки, но я не уверен, как их хранить.Кроме того, он проходит мимо перестановок, которые мне нужны после 9999 года, и кажется, что он начинается заново.Я ищу способ сохранить '0000', '0001', '0002', '0003', '0004', ......, '9999' (0000-9999) в векторе строк.Я должен сделать это без рекурсии, и использование STL принято.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Я пытался написать этот код быстро, поэтому я использовал MACRO DIGITFOR.

#define DIGITFOR(i) for (char i='0'; i <= '9'; i++)
vector<string> permutations;

DIGITFOR(i) DIGITFOR(j) DIGITFOR(k) DIGITFOR(l){
    char cad[5];
    cad[4]='\0';
    cad[0]=i;
    cad[1]=j;
    cad[2]=k;
    cad[3]=l;
    permutations.push_back(cad);
}
0 голосов
/ 11 декабря 2018

Просто сохраните числа от 0 до 9999 в векторе строк.Нет необходимости использовать next_permutation.

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main(int argc, char* argv[]) {
  vector<string> nums;

  for(int i = 0; i < 10000; ++i) {
    string num = to_string(i);
    nums.push_back(string(4 - num.length(), '0') + num);
  }

  for(string& s: nums) {
    cout << s << " ";
  }
  cout << endl;

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