C语言求无序集合中的最大及的有序集合
求无序集合中的最大和的有序集合
#include /* ZY_3.c */
#include
#include
#define N 21
int InputData(int a[]);
void EnQueue(int x,int c[][],int *num);
void QueueMax(int c[][],int b[],int *num);
int Max=0;
?
void main(void)
{
int a[N],b[N],c[N*(N-1)/2][N];
int n,i,j,QueueNum=0;
clrscr();
n=InputData(a);
for(i=0;i
for(j=0;j
c[i][j]=0;
for(i=1;i
{
c[1][1]=a[i];
c[1][0]=1;
QueueNum=1;
for(j=i+1;j<=n;j++)
EnQueue(a[j],c,&QueueNum);
QueueMax(c,b,&QueueNum);
}
printf("Success! Max=%d\nThere are: ",Max);
for(i=1;i<=b[0];i++)
printf("%d ",b[i]);
getch();
}
?
void QueueMax(int c[][N],int b[],int *QueueNum)
{
int i,j,sum,z,t=0;
for(i=1;i<=*QueueNum;i++)
{
sum=0;
for(j=1;j<=c[i][0];j++) sum+=c[i][j];
if(sum>t) { t=sum; z=i; }
}
if(t>Max)
{
Max=t;
for(i=1;i<=c[z][0];i++)
b[i]=c[z][i];
b[0]=c[z][0];
}
}
?
void EnQueue(int x,int c[][N],int *QueueNum)
{
int i,k,y,t=0;
for(i=1;i<=*QueueNum;i++)
{
if(x>=c[i][c[i][0]])
{
t++;
y=*QueueNum+t;
for(k=0;k<=c[i][0];k++) c[y][k]=c[i][k];
c[y][0]++;
c[y][c[y][0]]=x;
}
}
*QueueNum=*QueueNum+t;
}
?
int InputData(int a[])
{
int i,n;
printf("Please input number: ");
do {
scanf("%d",&n);
if (n<=0) printf("\nError! Please input number again:");
}while(n<=0);
printf("Please input data one by one: ");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
return n;
}