2021-07-22 关系配对_3男-3女判断配对。。

#include<stdio.h>
#define N_ABC 3
#define N_XYZ 3
typedef const int BiteERoor;
typedef BiteERoor berMan;
typedef BiteERoor berWuman;
berMan A=0,B=1,C=2;
berWuman X=0,Y=1,Z=2;
const int N = 3;
typedef int boolean;
boolean true=1,false=0;
typedef boolean *(BEROOR[N_ABC]);
int is_AllxOR(boolean const,boolean const,boolean const);
int main(int argc,char**argv){
//有ABC三男和XYZ三女,她们搞配对;
int i,j,k,sum[3],z,z1;
int so_k = 0;
char xyz[N_XYZ]={‘X’,‘Y’,‘Z’};
char abc[N_ABC]={‘A’,‘B’,‘C’};
boolean MansWu[N_XYZ][N_ABC]={{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}};
//boolean MansWuCObj[N_XYZ][N_ABC]={{0,0,0},{0,0,0},{0,0,0}};
boolean X_ABC[N_ABC]={-1,-1,-1},Zo1=0;
boolean Y_ABC[N_ABC]={-1,-1,-1},Zo2=0;
boolean Z_ABC[N_ABC]={-1,-1,-1},Zo3=0;
BEROOR p[N_XYZ]={X_ABC,Y_ABC,Z_ABC};
boolean boloMan[N_XYZ];
boolean *pz[N_XYZ]={&Zo1,&Zo2,&Zo3};
//其中 A 说和 X ; X 说和 C;C 说和 Z;
//已知都是假的配对
MansWu[X][A] = false;//A 说和 X
MansWu[X][C] = false;//X 说和 C
MansWu[Z][C] = false;//C 说和 Z
//已知配对是1对1配对,先从X检查关系。。

z1 = 0;
for(i=X;i<N;i++){
	z = 0;
	sum[z] = 0; 
for(j=A;j<N;j++){
	if(MansWu[i][j]!=false){
	    sum[z]=j,MansWu[i][j]=true;
		(*p)[i][z] = j;
		(*pz)[i] = ++z;
	printf("%d::%d:%d;\n",i,j,sum[z-1]);
	}		
}
if(z==1){
    for(j=X;j<N;j++)MansWu[j][sum[0]]=(j==i)?true:false;
}
}
for(i=0;i<N;i++){
	z = 0;
for(j=0;j<N;j++){
	if(MansWu[i][j]==true)
	    (*p)[i][z++] = j;
	}
    (*pz)[i] = z;
}
for(i=0;i<(*pz)[0];i++){
	printf("%d-%d:%d;\n",1,(*pz)[0],i);
	boloMan[0] = (*p)[0][i];
//	MansWuCObj[0][boloMan[0]] = true;
for(j=0;j<(*pz)[1];j++){
	printf("%d-%d:%d;\n",2,(*pz)[1],j);
	boloMan[1] = (*p)[1][j];
	if(!is_AndOrMar(boloMan[0],boloMan[1]))continue;
//	MansWuCObj[1][boloMan[1]] = true;
for(k=0;k<(*pz)[2];k++){
	printf("%d-%d:%d;\n",3,(*pz)[2],k);
	boloMan[2] = (*p)[2][k];
	if(!is_AndOrMar(boloMan[1],boloMan[2]))continue;
	if(!is_AndOrMar(boloMan[0],boloMan[2]))continue;
	if(is_AllxOR(boloMan[0],boloMan[1],boloMan[2])==true){
		printf("输出结果:\n");
		printf("%c :%c ::在一起;\n",xyz[0],abc[boloMan[0]]);
		printf("%c :%c ::在一起;\n",xyz[1],abc[boloMan[1]]);
		printf("%c :%c ::在一起;\n",xyz[2],abc[boloMan[2]]);
	}
}
}
}
for(i=0;i<N;i++){
for(j=0;j<N;j++){
	printf("%d",MansWu[i][j]);
	putchar(' ');
}
putchar('\n');
}
return 0; 

}
int is_AndOrMar(boolean const a,boolean const b){
int xAnd_mr = true;
if(a == b)return false;
return xAnd_mr;
}

int is_AllxOR(boolean const a,boolean const b,boolean const c){
int xAll_or = true;
if(!is_AndOrMar(a,b))return false;
if(!is_AndOrMar(a,c))return false;
if(!is_AndOrMar(c,b))return false;
return xAll_or;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值