📄 ruiji(c).txt
字号:
#include<iostream>
#include<string>
using namespace std;
int k;//测(集合中)立方的长度
void pp(int a[]);//吸收子函数
void qq(char b[],int a[]);//输入(ASC码转成数字子函数)
int kk(int a[]);//测集合中的立方数子函数
void uu(int a[]);//排序子函数
void ii(char a[],char b[],int d[]);//并子函数
//void rr(int a[],int b[]);//包含子函数
void tt(int a[],int b[],int c[]);//相交子函数(集合)
int dd(int a,int b);//相交子函数(立方)
void ii(int a[],int b[]);//相容子函数(集合)
int oo(int a,int b);//相容子函数(立方)
void ww(int a[],int b[]);//并子函数(整型)
void ll(int a[],char f[]);//输出子函数
void ee(int a[],int b,int d[]);//锐积(集合对立方)
void yy(int a[],int b[],int d[]);//锐积(集合对集合)
void rr(int a,int b,int c[]);//锐积(立方对立方)
void main()//主函数
{int a1[100],a2[100],a3[100]={0},e=0,i,m;
char b[100]={0},c[100]={0},d[2]=" ",a[100]={0};
gets(b);
m=strlen(b);//测集合长度
for(i=0;i<m;i++)
{if(b[i]==' ') {k=i;break;}
else k=i+1;}
gets(c);
strcat(b,d);
strcat(c,d);
qq(b,a1);
qq(c,a2);
yy(a1,a2,a3);
ll(a3,a);
}
void ee(int a[],int b,int d[])//锐积(集合对立方)
{int i,j,l,m;
int c[100]={0};
j=kk(a);
for(i=0;i<j;i++)
{l=a[i];
rr(l,b,c);
ww(d,c);
for(m=0;m<100;m++)
c[m]=0;
}}
void yy(int a[],int b[],int d[])//锐积(集合对集合)
{int i,m,n,c[100]={0},p[100]={0},j;
m=kk(b);
n=b[0];
ee(a,n,d);
for(i=1;i<m;i++)
{
n=b[i];
ee(d,n,c);
for(j=0;j<100;j++)
{d[j]=c[j];
c[j]=0;}
}
pp(d);
uu(d);
}
void rr(int a,int b,int c[])//锐积(立方)
{
int m,p,q,x,y,n=0,i,j=1;
x=a&b;
if(x==a) ;
else {
y=dd(a,b);
if(y==0) {c[n]=a;n++;}
else {
for(i=0;i<k-1;i++)
j=j*4;
for(m=3;m<=3*j;m=m<<2)
{
p=m&a;
if(p!=m) continue;
else
{
q=m&b;
if(q!=m) {c[n]=a^q;n++;}
else continue;
}}}}}
void ll(int a[],char f[])//输出子函数
{
int i,j,l,h,m,n,p,q;
for(i=0;i<100;i++)
{
m=a[i];
p=kk(a);
for(j=0,l=3;j<k;j++,m=m>>2)
{n=m;
h=n&l;
switch(h)
{case 1:{f[i*(k+1)+k-j-1]='0';break;}
case 2:{f[i*(k+1)+k-j-1]='1';break;}
case 3:{f[i*(k+1)+k-j-1]='x';break;}
default:break;}
}}
for(q=0;q<p;q++)
f[k+q*(k+1)]=' ';
cout<<"shuchu="<<f<<endl;
}
void qq(char b[],int a[])//ASC码转成数字子函数
{int i,m,h,j=0,n,p,q;
m=strlen(b);
if(m==1&&b[0]==' ')
{for(n=0;n<100;n++)
a[n]=0;}
else
{
for(i=0,a[j]=0,h=0;i<m;i++,h++)
{if(b[i]==' ')
{if(k==h) {h=-1;a[j+1]=0;j++;}
else {cout<<"立方长度不等"<<endl;exit(1);}
}
else
{
a[j]=a[j]<<2;
switch(b[i])
{case'0':a[j]=a[j]+1;break;
case'1':a[j]=a[j]+2;break;
case'x':a[j]=a[j]+3;break;
default:{cout<<"数据输入错误"<<endl;exit(1);}}}//出错后,后面的数不再输入
}
for(;j<100;j++) a[j]=0;
}
void tt(int a[],int b[],int c[])//相交子函数(集合)
{int i,j,m,n,p,q,l,x=0;
m=kk(a);
n=kk(b);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{p=a[i];
q=b[j];
l=dd(p,q);
if(l==0) continue;
else {c[x]=l;x++;}
}
pp(c);
uu(c);
}
void ww(int a[],int b[])//并子函数(整型)
{int m,n,l;
m=kk(a);
n=kk(b);
for(l=m;l<m+n;l++)
a[l]=b[l-m];
}
int dd(int a,int b)//相交子函数(立方)
{int i,j,p,n,s,m=2;
i=a&b;
j=i*2;
s=i|j;
for(n=1;n<k;n++)
m=m*4+2;
p=s&m;
if(p!=m) return(0);
else return(i);
}
void rr(int a[],int b[])//包含子函数
{int c,d,i,j,m=0,n=0,l,p,q;
p=kk(a);
q=kk(b);
for(i=0;i<p;i++)
for(j=0;j<q;j++)
{c=a[i];
d=b[j];
l=c&d;
if(l==c&&l!=d) {m++;break;}
else if(l==d&&l!=c) {n++;break;}
else if(l==c&&l==d) {m++;n++;break;}
else ;
}
if(m==p) cout<<"a包含于b"<<endl;
else if(n==q) cout<<"b包含于a"<<endl;
else cout<<"a,b互不包含"<<endl;
}
int kk(int a[])//测集合中的立方数
{int i,j=0;
for(i=0;i<100;i++)
if(a[i]==0) ;
else j++;
return(j);
}
void pp(int a[])//吸收子函数
{
int i,j,p=0;
for(i=0;i<100;i++)
{for(j=i+1;j<100;j++)
{p=a[i]&a[j];
if(p==a[i]) a[i]=0;
else if(p==a[j]) a[j]=0;
else ;}
}}
void uu(int a[])//排序
{int i,j,p;
for(i=0;i<99;i++)
for(j=i+1;j<100;j++)
{if(a[i]>a[j]) ;
else {p=a[j];a[j]=a[i];a[i]=p;}
}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -