离散编程,求偏序关系的极大元与极小元
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
求偏序集中的极大元与极小元
成绩: 10 / 折扣: 0.9
输入
输入偏序集 <A, £ > , A 中的元素数不超过 20 个,分别用单个小写的英文字母表示。
输入的第一行给出 A 中的各个元素,两个相邻的元素之间用逗号隔开。
输入的第二行给出偏序关系£,用有序对的形式给出,如 <a,b>,<c,a> 等等,两个相邻的有序对之间用逗号隔开。
输出
输出 A 的极小元与极大元。
输出的第一行给出各个极小元,两个相邻元素之间用逗号隔开,输出的元素要求按照英文字母的自然顺序排列输出。
输出的第二行给出各个极大元,两个相邻元素之间用逗号隔开,输出的元素要求按照英文字母的自然顺序排列输出。
测试输入期待的输出时间限制内存限制额外进程
测试用例 1 以文本方式显示
1.a,b,c,d↵
2.<a,b>,<c,d>,<a,a>,<b,b>,<c,c>,<d,d>↵
以文本方式显示
1.a,c↵
2.b,d↵
无限制 1024KB 0
测试用例 2 以文本方式显示
1.a,b,c,d,e,f↵
2.<a,b>,<c,d>,<e,f>,<a,a>,<b,b>,<c,c>,<d,d>,<e,e>,<f,f>↵
以文本方式显示
1.a,c,e↵
2.b,d,f↵
无限制 1024KB 0
源程序
#define N 100
#include"stdio.h"
#include"string.h"
int main( )
{ char b[N],c[N],d[N],e[N]; /* b放元素,c放偏序关系,d放极小元,e放极大元 */ int i,j,m=0,n=0,len1,len2,s;
scanf ( "%s%s",b,c );
len1 = strlen( b );
len2 = strlen( c );
for ( i=0;i<len1; ) /* 求极小元,则它除自反关系外不在关系的后者中出现 */ { for ( j=3;j<len2; )
{ s=j-2;
if ( (( c[s]==c[j] ) || ( b[i]!=c[j] )) && j!=(len2-2) ) j=j+6;
else if ( (( c[s]==c[j] ) || ( b[i]!=c[j] )) && (len2-j==2) )
{ d[m]=b[i];
m++;
i=i+2;
j=j+6;
}
else
{ i=i+2;
break;
}
}
}
for ( i=0;i<len1; ) /* 求极大元,则它除自反关系外不在关系的前者中出现*/
{ for ( j=1;j<len2; )
{ s=j+2;
if ( (( b[i]!=c[j] )||( c[j]==c[s] )) && j!=(len2-4) ) j=j+6;
else if ( (( b[i]!=c[j] ) || ( c[j]==c[s] )) && ( len2-j==4 ) )
{ e[n]=b[i];
i=i+2;
n++;
j=j+6;
}
else
{ i=i+2;
break;
}
}
}
m=m-1;n=n-1;
for ( i=0;i<m; )
{ printf ( "%c",d[i] );
printf ( "," );
i++;
}
printf ( "%c\n",d[i] );
for ( i=0;i<n; )
{ printf ( "%c",e[i] );
printf ( "," );
i++;
}
printf ( "%c\n",e[i] );
}