⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 计算下一个组合的c语言源代码.txt

📁 c语言的一些常见的算法以及思考和改进的文章,写的很不错,花费了很大的精力从网络了搜罗的,希望大家喜欢.
💻 TXT
字号:
计算下一个组合的C语言源代码[原创] 
以前写过几个关于求任意组合的代码,有兴趣的朋友可以比较一下:

http://bugeyes.blog.edu.cn/user1/20989/archives/2005/264294.shtml

http://bugeyes.blog.edu.cn/user1/20989/archives/2005/302729.shtml

http://bugeyes.blog.edu.cn/user1/20989/archives/2006/1113179.shtml

从n个数中取r个数的组合,假设c1c2c3...cr是其中一个组合,则计算其下一个组合的算法如下:

Step 1:求满足不等式cj<n-r+j的最大坐标,并设为i。即i=max{j | cj<n-r+j}

Step 2:设置ci=ci+1

Step 3:设置cj=cj-1+1,对于j=i+1,i+2,i+3,...,r

下面的代码演示了从任意n个符号中取r个符号的组合的过程,其中在计算某组合的下一个组合时利用了上面的算法。

#i nclude <conio.h>

int fun(int choice[],int r,int n)
{//利用了上面的算法,计算下一个组合
  int i,j;
  for(i=r-1;i>=0;i--)
     if(choice[i]<n-r+i)
         break;
  if(i<0)//已经是最后一个了
     return 0;
  choice[i]+=1;
  for(j=i+1;j<r;j++)
     choice[j]=choice[j-1]+1;
  return 1;//还有后续组合
}

void comb(char source[],int total,int count)
{
  int choice[5];
  int i;
  for(i=0;i<count;i++)//人工设置第一个组合
     choice[i]=i;
  do
  {
     printf("\n");
     for(i=0;i<count;i++)
     {//输出当前组合
          int t=choice[i];
          printf("%c ",source[t]);
     }
  }while(fun(choice,count,total));
}

void main()
{
   char array[5]={'a','b','c','d','e'};
   clrscr();
   comb(array,5,2);
}
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -