打印所有可能的组合,包括重复,订单也很重要

时间:2015-04-27 04:09:49

标签: c++ for-loop recursion

我正在尝试将两个集合(向量)组合成一个包含重复项的所有元素的大集合。

例如:

setA =" abc"和setB有" 12345" 我的输出需要看起来像这样:

{(a,1)(b,1)(c,1)}
{(a,1)(b,1)(c,2)}
{(a,1)(b,1)(c,3)}
{(a,1)(b,1)(c,4)}
{(a,1)(b,1)(c,5)}
{(a,1)(b,2)(c,1)}
{(a,1)(b,2)(c,2)}
{(a,1)(b,2)(c,3)}
{(a,1)(b,2)(c,4)}
{(a,1)(b,2)(c,5)}
{(a,1)(b,3)(c,1)}
{(a,1)(b,3)(c,2)}
.................    
{(a,5)(b,3)(c,5)}
{(a,5)(b,4)(c,1)}
{(a,5)(b,4)(c,2)}
{(a,5)(b,4)(c,3)}
{(a,5)(b,4)(c,4)}
{(a,5)(b,4)(c,5)}
{(a,5)(b,5)(c,1)}
{(a,5)(b,5)(c,2)} 
{(a,5)(b,5)(c,3)}
{(a,5)(b,5)(c,4)}
{(a,5)(b,5)(c,5)}

全部125个元素(5 * 5 * 5)

我尝试使用for循环

    for (size_t i = 0; i < v_setB.size(); i++)
    {
        for (size_t k = 0; k < v_setB.size(); k++)
        {
            for (size_t n = 0; n < v_setB.size(); n++)
            {
                stringstream  temp;
                temp << "{(" << v_setA[0] << "," << v_setB[i] << ")(" << v_setA[1] << "," << v_setB[k] << ")(" << v_setA[2] << "," << v_setB[n] << ")}";
                v_SavedElem.push_back(temp.str());
            }
        }
    }

但是,如果第一组中的元素数量增加,那么它将无效。有人可以帮助创建递归函数吗?

1 个答案:

答案 0 :(得分:0)

该函数应该使用两组(例如&#34; abc&#34;和#34; 12345&#34;)作为参数,并生成您描述的字符串。

那么怎么样:给它第三个参数 - 或者更好的是让它成为第一个参数 - 这是一个用作这些字符串前缀的字符串。另一个是目的地矢量。

该函数从setA中删除第一个元素,并将其附加到前缀字符串。然后它迭代setB中的元素,并保存结果或再次调用函数(使用较短的setA)。

<script>
function sendmessage()
   {
   var message_content=$("#message").val();
    $.ajax({
          type: "POST",
          url: "newmessage.php",
          dataType: "html",
          data: {message:message_content},
          success: function(data) {
                    $("#newmessage").replaceWith(data); 
              }
        });
   }
   </script>