借书方案知多少,有没有比三重循环更简洁的方式?
题:小明有五本新书,要借给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: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);
}
目前来说循环比较简洁,但是一旦数据多了,递归比较简洁~
页:
[1]