⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ruiji(c).txt

📁 用C及部分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 + -