各位大虾帮帮忙。。改改,,,,
题目原意; 以1到10随机排列,6个数为一组,编一程序。输出所有不重复且不包含有我再输入进去几个数组的数组输出就行了。 例我要找出不包含有2`9 3`7 的两组数的输出1`2`3`4`9` 10 1`2`3`4`5 `6 1`3`4`7`8`9 那输出第2组了就可以了
现在改为; 以1到10随机排列,6个数为一组,编一程序。输出所有不重复且和我再输入的数组中有2个或以下数字相同的数组输出就行了。(就是和我输入的数组做比较}
#include <stdio.h>
#include <stdlib.h>
int same_state=0; //包含状态位
void findout(int a[],int n,int m,int r,int q[],int **BB,int bb);
void main()
{
int n,r;int *p,*q;
int b,bb;int **B; //存储要删除的数组
printf("要找的不同的整数个数:");
scanf("%d",&n);
p=(int*)malloc(n*sizeof(int));
printf("输入%d个不同的整数:",n);
for(int i=0;i<n;i++)
{
scanf("%d",&p);
}
printf("输入要找元素组合的个数:");
scanf("%d",&r);
q=(int *)malloc(r*sizeof(int));
printf("\n输入你将要输入的数组个数:"); //根据你的例子有两个数组,这里应该输入2
scanf("%d",&bb);
B=(int **)malloc(bb*sizeof(int*));
for( i=0;i<bb;i++)
{
B=(int *)malloc(sizeof(int));
B[0]=0;
printf("请输入第%d个数组:",i+1);
for(int j=2;1;j++)
{
scanf("%d",&b);
if(b==0) break; //每输入一个数组后请输入一个0来结束输入
else
{
B=(int *)realloc(B,j*sizeof(int));
B[j-1]=b;
B[0]++;
}
}
}
findout(p,n,r,r,q,B,bb);
}
void findout(int a[],int n,int m,int r,int q[],int **BB,int bb)
{
for(int i=n;i>=m;i--)
{
q[m-1]=a[i-1];
if(m>1)
findout(a,i-1,m-1,r,q,BB,bb);
else
{
/*---这段是比较,如果输出数组中包含了其中一项要删除的数组,same_state将变为b,否则仍然是0---*/
same_state=0;
for(int x=0;x<bb;x++)
{
for(int y=0;y<BB[x][0];y++)
{
if(same_state!=y) break;
for(int z=0;z<r;z++)
{
if(q[z]==BB[x][y+1])
{
same_state++;
}
}
}
if(same_state==BB[x][0]) break;
else same_state=0;
}
/*---------------------------------------------------------------------------------*/
if(same_state==0)
{
for(int j=r-1;j>=0;j--)
printf("%d ",q[j]);
putchar('\n');
}
}
}
}