用C\C++实现离散数学简单逻辑运算

这两天写C语言代码遇到这个离散题,感觉还是蛮经典的,自己总结一下。

</pre><p>编写程序,解决下述问题:已知有A、B、 C、D、E、F共6人参加程序竞赛。其中:</p> A和B中至少一人获奖; A、C、D中至少二人获奖; A、E中至多一人获奖; B和F或者同时获奖,或者都未获奖; C和E的获奖情况也相同; 如果E未获奖,则F也不可能获奖; C、D、E、F中至多3人获奖。<p>请问那些人获了奖?</p><p>每个人有两种状态,获奖或者不获奖,用0/1标示两种状态,1表示中奖,0标示没中奖。</p><p>用check()函数实现对离散逻辑的判断。</p><p></p><pre name="code" class="cpp"><pre name="code" class="cpp">#include<stdio.h>
/*
*Function:判断参数数组是否满足离散条件
*auhtor:杨皓斐
*date:2015.5.9
*/
bool check(int nArray[])
{
	int flag=0;
	//AB都没有获奖
	if((nArray[0]==0)&&(nArray[1]==0))
		return false;
	//A、C、D中至少二人获奖
	if(nArray[0]==1)
		flag++;
	if(nArray[2]==1)
		flag++;
	if(nArray[3]==1)
		flag++;
	if(flag<2)
		return false;
	//A、E都获奖
	if((nArray[0]==1)&&(nArray[4]==1))
		return false;
	//B、F获奖情况不相同
	if(nArray[1]!=nArray[5])
		return false;
	//C、E获奖情况不相同
	if(nArray[2]!=nArray[4])
		return false;
	//E未获奖,F获奖
	if((nArray[4]==0)&&(nArray[5]==1))
		return false;
	//C、D、E、F中获奖人数大于3
	flag=0;
	if(nArray[2]==1)
	flag++;
	if(nArray[3]==1)
	flag++;
	if(nArray[4]==1)
	flag++;
	if(nArray[5]==1)
	flag++;
	if(flag>3)
		return false;
	//条件满足,返回true
	return true;
}
int main()
{
	int temp,nArray[6],i,j;
	//六个元素,总共pow(2,6)种情况
	for(int i = 0; i < 64; ++i){
        int temp = i;
		//利用temp临时变量,保证生成的64个数组不重复
        for(int j = 0; j < 6; ++j){
            nArray[j] = temp%2;
            temp /= 2;
        }
		if(check(nArray))
		{
		printf("找到解\n");
		for(j = 0;j < 6;j ++)
		{
		if(nArray[j]==1)
			printf("%c获奖\n",'A'+j);
		}
		
		}

	}
	
return 0;
}


 
 

你可能感兴趣的:(C++,c,代码,数学,C语言)