若干条件是指比如 (若赵去、则钱也去... 孙、李两人同去或者同不去) 等等 这种蕴含 合取 析取的关系
其实,在你给出相应的若干条件时,就已经差不多就确定那些人满足条件了啊,用逻辑来表示的话,可以这样:去赋值1,不去赋值0.
5个人用5个变量,分别为0或1,一个条件就能设置一遍5个变量的值,可以用if-else。
另外一种高级的写法就是用位运算,用5位二进制的00000,来表示,每个位有两种变化0/1,然后根据条件给相应的位赋值,最后得出的值就可知道了,
比如11111表示5个人都去。
#include "stdafx.h"
#include
using namespace std;
int logic(int x,int y, int z)
{
if(z==0x31)
return x & y;
else if(z==0x32)
return x | y;
else if(z==0x33)
return (!x) | y;
else
return 0;
}
int test(int tmp)
{
if(tmp%2==1)
return tmp&1;
else
return tmp&0;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n;
cout<<"请输入条件数量"<<endl;
cin>>n;//条件数
//for(int i=0;i<n;i++)
char *x=(char*)malloc(n*sizeof(char));
char *y=(char*)malloc(n*sizeof(char));
char *z=(char*)malloc(n*sizeof(char));
cout<<"请输入3个数字,前两个分别表示赵钱孙李周对应序号,第三个表示关系类型"<<endl;
for(int i=0;i<n;i++)
cin>>x[i]>>y[i]>>z[i];
for ( int na=0;na<32;na++)
{
for(int j=0;j<n;j++)
{
int tmp1=na>>(x[j]-'0');
int tmp2=na>>(y[j]-'0');
tmp1=test(tmp1);
tmp2=test(tmp2);
if(logic(tmp1,tmp2,z[j]))
{
if(j==n-1)
{
char buf[30]={0};
itoa(na,buf,2);
cout<<buf<<endl;
}
}
}
}
return 0;
}
我是初学者 用c++写了一个 应该差不多是这样