<legend id='En5k2'><style id='En5k2'><dir id='En5k2'><q id='En5k2'></q></dir></style></legend>

    • <bdo id='En5k2'></bdo><ul id='En5k2'></ul>
  • <small id='En5k2'></small><noframes id='En5k2'>

  • <i id='En5k2'><tr id='En5k2'><dt id='En5k2'><q id='En5k2'><span id='En5k2'><b id='En5k2'><form id='En5k2'><ins id='En5k2'></ins><ul id='En5k2'></ul><sub id='En5k2'></sub></form><legend id='En5k2'></legend><bdo id='En5k2'><pre id='En5k2'><center id='En5k2'></center></pre></bdo></b><th id='En5k2'></th></span></q></dt></tr></i><div id='En5k2'><tfoot id='En5k2'></tfoot><dl id='En5k2'><fieldset id='En5k2'></fieldset></dl></div>

        <tfoot id='En5k2'></tfoot>

        n 个元素中 k 个元素的所有组合

        时间:2024-05-12
          • <i id='NBRT3'><tr id='NBRT3'><dt id='NBRT3'><q id='NBRT3'><span id='NBRT3'><b id='NBRT3'><form id='NBRT3'><ins id='NBRT3'></ins><ul id='NBRT3'></ul><sub id='NBRT3'></sub></form><legend id='NBRT3'></legend><bdo id='NBRT3'><pre id='NBRT3'><center id='NBRT3'></center></pre></bdo></b><th id='NBRT3'></th></span></q></dt></tr></i><div id='NBRT3'><tfoot id='NBRT3'></tfoot><dl id='NBRT3'><fieldset id='NBRT3'></fieldset></dl></div>

            <small id='NBRT3'></small><noframes id='NBRT3'>

            <legend id='NBRT3'><style id='NBRT3'><dir id='NBRT3'><q id='NBRT3'></q></dir></style></legend>

              • <bdo id='NBRT3'></bdo><ul id='NBRT3'></ul>
                <tfoot id='NBRT3'></tfoot>

                    <tbody id='NBRT3'></tbody>

                1. 本文介绍了n 个元素中 k 个元素的所有组合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  有人可以给我一个函数的链接或伪代码,用于从 n 中找到 k 个元素的所有组合吗?可能在 STL 中.我不需要计算 n 选择 k,我需要列出所有大小为 k 的数字的向量.

                  Can somebody provide me a link or pseudocode of a function for finding all combinations of k elements out of n? possibly in STL. I don't need to compute n choose k, I need to list all vectors of numbers of size k.

                  谢谢

                  推荐答案

                  在 C++ 中给出以下例程:

                  In C++ given the following routine:

                  template <typename Iterator>
                  inline bool next_combination(const Iterator first, Iterator k, const Iterator last)
                  {
                     /* Credits: Thomas Draper */
                     if ((first == last) || (first == k) || (last == k))
                        return false;
                     Iterator itr1 = first;
                     Iterator itr2 = last;
                     ++itr1;
                     if (last == itr1)
                        return false;
                     itr1 = last;
                     --itr1;
                     itr1 = k;
                     --itr2;
                     while (first != itr1)
                     {
                        if (*--itr1 < *itr2)
                        {
                           Iterator j = k;
                           while (!(*itr1 < *j)) ++j;
                           std::iter_swap(itr1,j);
                           ++itr1;
                           ++j;
                           itr2 = k;
                           std::rotate(itr1,j,last);
                           while (last != j)
                           {
                              ++j;
                              ++itr2;
                           }
                           std::rotate(k,itr2,last);
                           return true;
                        }
                     }
                     std::rotate(first,k,last);
                     return false;
                  }
                  

                  然后您可以继续执行以下操作:

                  You can then proceed to do the following:

                  // 9-choose-3 
                  std::string s = "123456789";
                  std::size_t k = 3;
                  do
                  {
                     std::cout << std::string(s.begin(),s.begin() + k) << std::endl;
                  }
                  while(next_combination(s.begin(),s.begin() + k,s.end()));
                  

                  或者对于 int 的 std::vector:

                  Or for a std::vector of int's:

                  // 5-choose-3 
                  std::size_t n = 5;
                  std::size_t k = 3;
                  
                  std::vector<int> ints;
                  for (int i = 0; i < n; ints.push_back(i++));
                  
                  do
                  {
                     for (int i = 0; i < k; ++i)
                     {
                        std::cout << ints[i];
                     }
                     std::cout << "
                  ";
                  }
                  while(next_combination(ints.begin(),ints.begin() + k,ints.end()));
                  

                  这篇关于n 个元素中 k 个元素的所有组合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:C++ std::vector 是如何实现的? 下一篇:为什么是“!="?与迭代器一起使用而不是“&lt;"?

                  相关文章

                  <tfoot id='MOnhY'></tfoot>

                  <legend id='MOnhY'><style id='MOnhY'><dir id='MOnhY'><q id='MOnhY'></q></dir></style></legend>
                  <i id='MOnhY'><tr id='MOnhY'><dt id='MOnhY'><q id='MOnhY'><span id='MOnhY'><b id='MOnhY'><form id='MOnhY'><ins id='MOnhY'></ins><ul id='MOnhY'></ul><sub id='MOnhY'></sub></form><legend id='MOnhY'></legend><bdo id='MOnhY'><pre id='MOnhY'><center id='MOnhY'></center></pre></bdo></b><th id='MOnhY'></th></span></q></dt></tr></i><div id='MOnhY'><tfoot id='MOnhY'></tfoot><dl id='MOnhY'><fieldset id='MOnhY'></fieldset></dl></div>

                    <bdo id='MOnhY'></bdo><ul id='MOnhY'></ul>

                    <small id='MOnhY'></small><noframes id='MOnhY'>