|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题:小明有五本新书,要借给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[m-1] = 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[b[i]]);
- }
- printf("\n");
- }
- }
- }
- int main()
- {
- int n, m;
- n = 5; //5本书
- m = 3; //3个人
- int a[n];
- int b[m];
- for(int i = 0; i < n; i++)
- {
- a[i] = i + 1;
- }
- const int M = m;
- combine(n, m, a, b, M);
- }
复制代码
|
|