【问题标题】:Permutations of a four character string made up of only numbers 0-9仅由数字 0-9 组成的四字符串的排列
【发布时间】:2018-12-11 19:00:25
【问题描述】:

您好,感谢您阅读我的问题。我希望弄清楚如何存储仅由数字组成的 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。

【问题讨论】:

  • 如果允许重复,这通常称为cartesian product,而不是permutations
  • 显示的代码不能产生'0000'等,请编辑您的问题以包含minimal reproducible example
  • 见笛卡尔积。
  • @user10605163 Combination 也不是正确的词——它暗示顺序无关紧要。
  • @TypeIA 谢谢,不知道为什么我说combinations

标签: c++ c++11


【解决方案1】:

只需将数字 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;
}

【讨论】:

  • for(it = nums.begin(); it!=nums.end(); it++){ cout
  • 使用新的 for 循环语法:for(string&amp; str: nums) { cout &lt;&lt; str &lt;&lt; endl; }
  • 新语法给了我同样的结果。
  • 你确定你抄对了吗?我修改了我的答案以形成一个适合我的完整示例。
  • 对不起,这是我的错误,我把它放在循环中的函数完全超出了我的想象,哈哈
【解决方案2】:

我试图快速编写这段代码,这就是我使用 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);
}

【讨论】:

猜你喜欢
  • 2010-10-25
  • 2019-09-26
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 2017-09-24
  • 2020-09-19
  • 2013-04-21
相关资源
最近更新 更多