0

我正在尝试在我的计算机上执行以下操作,但没有让它执行,比如说我有一个人的名字,我想对他名字中的字母进行不同的组合:

NAME ABC
                                       ABC
                                 /      |      \
                               A        B        C
                              /|\     / | \     /| \
                            AA AB AC BA BB BC CA CB CC 
                             .           .        .
                             .           .        .

我想组合上述名称,例如:

ABC A B C AA AB AC BA BB BC CA CB CC.... AAA... BBB... CCC...

我怎样才能在 C++ 中做到这一点?

我为它写了以下代码:

 string c = "ABC";
 for (i = 0; i < c.length(); i++)
     c.at(i);

但它只生成A, B, C. 如何生成AB, AA, AC, ...

4

2 回答 2

3

你可以这样做

string c='ABC';
int n=c.length();

for(int i=0;i<n;i++)
{
  std::cout<<c[i]<<" ";

  for(int j=0 ; j< n ;j++)
  {
      std::cout<<c[i]<<c[j]<<" ";
  }
}

输出是: A AA AB AC B BA BB BC C CA CB CC

如果您想要三个字母组合,请在第二个 for 循环中添加第三个 for 循环,并具有相同的端点,例如

for(int k=0;k<n;k++)并在 for 循环内cout<<c[i]<<c[j]<<c[k]<<" "

于 2013-11-01T05:37:14.510 回答
2

这是一个涉及可爱递归模板的解决方案:

#include <iostream>
#include <string>

template <int Depth>
void print_combinations(const std::string& name, const std::string& prefix = "")
{
    for (int i=0; i < name.size(); i++) {
        std::cout << prefix << name[i] << " ";
        print_combinations<Depth - 1>(name, prefix + name[i]);
    }
}

template <>
void print_combinations<0>(const std::string&, const std::string&)
{
}

int main()
{
    std::string name = "ABC";

    print_combinations<4>(name);
}

对于Depth=4(如上所述),它打印

A AA AAA AAAA AAAB AAAC AAB AABA AABB AABC AAC AACA AACB AACC AB ABA ABAA ABAB ABAC ABB ABBA ABBB ABBC ABC ABCA ABCB ABCC AC ACA ACAA ACAB ACAC ACB ACBA ACBB ACBC ACC ACCA ACCB ACCC B BA BAA BAAA BAAB BAAC BAB BABA BABB BABC BAC BACA BACB BACC BB BBA BBAA BBAB BBAC BBB BBBA BBBB BBBC BBC BBCA BBCB BBCC BC BCA BCAA BCAB BCAC BCB BCBA BCBB BCBC BCC BCCA BCCB BCCC C CA CAA CAAA CAAB CAAC CAB CABA CABB CABC CAC CACA CACB CACC CB CBA CBAA CBAB CBAC CBB CBBA CBBB 牛熊证 CBC CBCA CBCB CBCC CC CCA CCAA CCAB CCAC CCB CCBA CCBB CCBC CCC CCCA CCCB CCCC

于 2013-11-01T05:59:58.237 回答