C语言递归练习2

时间:2022-09-09 20:00:51

问题描述

从1到n(n < 1000)个自然数中选出r个数进行组合,并按指定的格式输出组合的结果。例如:

n=5、r=3 时,共有10种组合,运行程序,要按下面的格式输出:


1 2 3
      4
      5
   3 4
      5
   4 5
2 3 4
      5
   4 5
3 4 5


#include <stdio.h>

int n,r,flag;       /*flag=0 表示另起一行*/

void arrange(int s,int j)   /*从s开始选j个元素*/
{
    int i,k;
    for(i=s;i<= n-j+1;i++)
    {
        if(flag)
        {
            for(k=0;k<r-j;k++)
            {
                printf("  ");
            }
        }
        printf("%d ",i);
        flag=0;
        if(j > 1)
        {
            arrange(i+1,j-1);
        }
        else
        {
            putchar('\n');
            flag=1;
        }
    }
}//arrange

int main()
{
    scanf("%d%d",&n,&r);
    while(n >=1000 || r > n)
    {
        printf("\nEnter error,please enter again(n < 1000 && r < n)");
        scanf("%d%d",&n,&r);
    }
    flag=1;
    arrange(1,r);
    return 0;
}//main