Sanks 发表于 2018-10-3 15:24:21

借书方案知多少,有没有比三重循环更简洁的方式?

题:小明有五本新书,要借给a,b,c三位小朋友,若每人每次只能借一本书,则可以有多少种不同的借法?
解决方案一:
#include <stdio.h>

void main()
{
        int a, b, c;

        for (a = 1; a <= 5; a++) {
                for (b = 1;b <= 5; b++) {
                        if (a != b) {
                                for (c = 1; c <= 5;c++)
                                        {if (c != a && c != b) {printf("a:%d b: %d c: %d",a,b,c);}}
                        }
                }
        }
}
以上是使用了三层循环的解决方式,请问有没有更加简单的方式?

calton007 发表于 2018-10-9 14:24:27

本帖最后由 calton007 于 2018-10-9 14:27 编辑

#include <stdio.h>

void combine(int n, int m, int a[], int b[], const int M)
{
        for(int j = n; j >= m; j--)
        {
                b = j-1;
                if(m > 1)
                {
                        combine(j-1, m-1, a, b, M);
                }
                else
                {
                        for(int i = M - 1; i >= 0; i--)
                        {
                                printf("%d ", a]);
                        }
                        printf("\n");
                }
        }       
}
int main()
{
        int n, m;
        n = 5;//5本书
        m = 3;//3个人
        int a;
        int b;
        for(int i = 0; i < n; i++)
        {
                a = i + 1;
        }       
        const int M = m;
        combine(n, m, a, b, M);
}

claws0n 发表于 2018-10-19 10:30:29

目前来说循环比较简洁,但是一旦数据多了,递归比较简洁~
页: [1]
查看完整版本: 借书方案知多少,有没有比三重循环更简洁的方式?