C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 迭代任何大小的子集大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_944_1@
我可以遍历大小为1的子集

for( int a = 0; a < size; a++ ) {

或者大小为2的子集

for( int a1 = 0; a1 < size; a1++ ) {
    for( int a2 = a1+1; a2 < size; a2++ ) {

或3

for( int a1 = 0; a1 < size; a1++ ) {
for( int a2 = a1+1; a2 < size; a2++ ) {
   for( int a3 = a2+1; a3 < size; a3++ ) {

但是如何对大小为n的子集执行此操作?

根据Adam Rosenfield的回答,这可以完成这项工作

void iterate(int *a,int i,int size,int n)
{
 int start = 0;
 if( i > 0 ) start = a[i-1]+1;
 for(a[i] = start; a[i] < n; a[i]++) {
  if(i == n-1) {
      // a is the array of inDices of size n
      for( int k = 0; k < size; k++ ) {
          printf("%d ",a[k]);
      }
      printf("\n");
  }
        else
            iterate(a,i+1,size,n);
    }
}

解决方法

@H_874_29@ 你可以使用递归:

void iterate(int *a,int n)
{
    for(a[i] = 0; a[i] < size; a[i]++)
    {
        if(i == n-1)
            Dostuff(a,n);  // a is the array of inDices of size n
        else
            iterate(a,n);
    }
}
...
// Equivalent to 4 nested for loops
int a[4];
iterate(a,4);

大佬总结

以上是大佬教程为你收集整理的c – 迭代任何大小的子集全部内容,希望文章能够帮你解决c – 迭代任何大小的子集所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。