一道逻辑题
如图所示,该怎么做呢? 逻辑
[解决办法]
E不是(8)(9)
假如A是,则
B是(1)
C不是(3)
D不是(2)
G不是(6)
FH是(5)与(9)矛盾
所以
A不是
C是(3)
G是(6)
EI不是(7)
F不是(9)
[解决办法]
如果可以写程序来做,就非常简单了,直接枚举即可!
[解决办法]
测试组合逻辑
[解决办法]
那我就猥琐的写份伪代码吧。
思路:
我们把ABCDE FJHIJ看成二进制的[bit9][bit8]...[bit0],bit=1表示为伪娘,bit=0表示美女。
比如:
0b1000010000表示A和F是伪娘。
伪代码:
/* define girls */
#define A (1 & (girl>>9))
#define B (1 & (girl>>8))
...
#define J (1 & (girl>>0))
check: girl
/* check 1th condition */
if (!check_1th(girl))
return 0; /* fail */
...
return 1; /* success */
main:
int girl ;
for (girl = 0; girl < (1<<10); girl ++)
if (check(girl))
print(girl); /* print fake girl */
return;
#include <iostream>
using namespace std;
#define A ((1<<0) & i)
#define B (((1<<1) & i) >>1)
#define C (((1<<2) & i) >>2)
#define D (((1<<3) & i) >>3)
#define E (((1<<4) & i) >>4)
#define F (((1<<5) & i) >>5)
#define G (((1<<6) & i) >>6)
#define H (((1<<7) & i) >>7)
#define I (((1<<8) & i) >>8)
#define J (((1<<9) & i) >>9)
void main()
{
int i;
for(i=0; i < (1<<10) ;i++)
{
if(A && !B) continue; //(1)
if(!C && D) continue; //(2)
if( (A + C ) == 2) continue;//(3)
if((B +D) != 1) continue; //(4)
if((D + E + F + G + H) < 2 ) continue; //(5)
if(C!=G) continue; //(6)
if((C + E + G + I )>2 ) continue; //(7)
if(E && (!F
[解决办法]
!G)) continue; //(8)
if(F && (G
[解决办法]
H)) continue; //(9)
if((!I)&&(!J) && (!H)) continue; //(10)
printf("%-6c%-6c%-6c%-6c%-6c%-6c%-6c%-6c%-6c%-6c\n",'A','B','C','D','E','F','G','H','I','J');
if(A)printf("%-6s","伪娘");else printf("%-6s","正常");
if(B)printf("%-6s","伪娘");else printf("%-6s","正常");
if(C)printf("%-6s","伪娘");else printf("%-6s","正常");
if(D)printf("%-6s","伪娘");else printf("%-6s","正常");
if(E)printf("%-6s","伪娘");else printf("%-6s","正常");
if(F)printf("%-6s","伪娘");else printf("%-6s","正常");
if(G)printf("%-6s","伪娘");else printf("%-6s","正常");
if(H)printf("%-6s","伪娘");else printf("%-6s","正常");
if(I)printf("%-6s","伪娘");else printf("%-6s","正常");
if(J)printf("%-6s","伪娘");else printf("%-6s","正常");
printf("\n");
}
}