重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includeiostream
双流网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。创新互联从2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
using namespace std;
#include"stdlib.h"
#include"time.h"
void main()
{
time_t t;
srand((unsigned) time(t));
int m,n;
cinn;
cinm;
for(int i=0;im;i++)
{
coutrand()%n+1" ";
coutrand()%n+1endl;
}
}
第二种方法
下面是用了个递归函数
using namespace std;
#include"stdlib.h"
#include"time.h"
void digui(int n,int m)
{
for(int i=0;im;i++)
{
coutrand()%n+1" ";
}
coutendl;
n--;
if(n!=0)
digui(n,m);
}
void main()
{
time_t t;
srand((unsigned) time(t));
int m,n;
cinn;
cinm;
digui(n,m);
}
#include stdio.h
int comb(int n, int m)
{
if (m==1)return n;
if (n==m||m==0)return 1;
return comb(n-1, m-1)+comb(n-1, m);
}
int main()
{
printf ("%d\n", comb(2, 1));
return 0;
}
典型的组合问题,解法有递归、回溯等等
递归法较简单,代码如下:
void combine(int a[], int n, int m, int b[], int M);
参数:
a 存放候选数字
n 总项数
m 取出项数
b 存放选出结果
M = m
#include "stdio.h"
#define MAX 100
void combine(int a[], int n, int m, int b[], int M);
int main(void)
{
int i;
int a[MAX], b[MAX];
for (i = 1; i 100; i++)
a[i - 1] = i;
combine(a, 5, 4, b, 4);
}
void combine(int a[], int n, int m, int b[], int M)
{
int i, j;
for (i = n; i = m; i--)
{
b[m - 1] = i - 1;
if (m 1)
combine(a, i - 1, m - 1, b, M);
else
{
for (j = M - 1; j = 0; j--)
printf("%d ", a[b[j]]);
printf("\n");
}
}
}
其他方法可查阅相关资料。
举个例子 不太明白是什么组合数
补充======
说白了就是求阶乘
fun是阶乘函数
直接调用即可
#include stdio.h
long sum=0;//组合数结果
long fun(int i) //阶乘
{
If(n==1)
return 1 ; /*递归出口*/
else
return i*fun(i-1); /*递归体*/
}
long com(int n, int m)
{
sum=fun(m)/fun(n)*fun(m-n);
return sum;
}
int main(void)
{
int m=9,n=4;
printf("%l" , com(4,9));
return 0;
}