从11选5全组合输出(每组有不同的5个数字组成,且每个数码只能取1~11之间的数)
并且满足条件每组中1,2,3中最少有1至2个
高手来啊要有源代码
C语言如何实现从11选5全组合输出
答案:3 悬赏:70 手机版
解决时间 2021-01-30 21:48
- 提问者网友:聂風
- 2021-01-30 02:11
最佳答案
- 五星知识达人网友:山河有幸埋战骨
- 2021-01-30 03:09
#include
void combine( int a[], int n, int m, int b[], int M ,int *count)
{
int i,j,t;
for(i=n; i>=m; i--)
{
b[m-1] = i - 1;
if (m > 1)
combine(a,i-1,m-1,b,M,count);
else
{
t=0;
for(j=M-1; j>=0; j--)
if(a[b[j]]==1||a[b[j]]==2||a[b[j]]==3)
t++;
if(t!=1&&t!=2)//判断包括1,2,3中的1个或者2个的组合
continue;
for(j=M-1; j>=0; j--)
printf("%d ",a[b[j]]);//打印出符合条件的组合
printf("\n");
*count=(*count)++;
}
}
}
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10,11};
int b[11];
static int count=0;
combine(a,11,5,b,5,&count);//11选5
printf("count=%d\n",count);//打印出符合条件的个数
}
void combine( int a[], int n, int m, int b[], int M ,int *count)
{
int i,j,t;
for(i=n; i>=m; i--)
{
b[m-1] = i - 1;
if (m > 1)
combine(a,i-1,m-1,b,M,count);
else
{
t=0;
for(j=M-1; j>=0; j--)
if(a[b[j]]==1||a[b[j]]==2||a[b[j]]==3)
t++;
if(t!=1&&t!=2)//判断包括1,2,3中的1个或者2个的组合
continue;
for(j=M-1; j>=0; j--)
printf("%d ",a[b[j]]);//打印出符合条件的组合
printf("\n");
*count=(*count)++;
}
}
}
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10,11};
int b[11];
static int count=0;
combine(a,11,5,b,5,&count);//11选5
printf("count=%d\n",count);//打印出符合条件的个数
}
全部回答
- 1楼网友:山君与见山
- 2021-01-30 05:01
#include
#define MAX 20
int c[MAX] = {0};
int M, N;
void print() {
int i;
for(i = 0; i < M; i++)
printf("%3d ", c[i + 1]);
printf("\t");
}
void Comp(int m) {
if (m == M + 1)
print();
else
for(c[m] = c[m - 1] + 1; c[m] <= N - M + m; c[m]++)
Comp(m + 1);
}
void main() {
N = 11;
M = 5;
Comp(1);
}
//https://zhidao.baidu.com/question/147382270.html 从这摘抄的...
- 2楼网友:轻雾山林
- 2021-01-30 04:17
// 不算排序,即12345 和54321视为同一组数据
#include "stdio.h"
int main()
{
int i,j,k,l,m;
int a[5];
for (i = 1; i <= 7; i++)
{
a[0] = i;
for (j = i+1; j <= 8; j++)
{
a[1]= j;
for (k = j + 1; k <= 9; k++)
{
a[2] = k;
for (l = k + 1; l <= 10; l++)
{
a[3] = l;
for (m = l + 1; m <= 11; m++)
{
a[4] = m;
if (a[0]<4 || a[1]<4 || a[2]<4 || a[3]<4 || a[4]<4)// 最少一个包含两个
printf("%d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4]);
}
}
}
}
}
while (1);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯