主题:The 2-NOTs problem
euc
[专家分:4310] 发布于 2007-03-04 16:58:00
设计一个黑盒,它接收A,B,C三个布尔数,输出NOT-A, NOT-B, and NOT-C.可以使用任意数量的AND和OR运算,但只能使用两次NOT运算.
回复列表 (共11个回复)
沙发
freeeerf [专家分:5440] 发布于 2007-03-04 22:47:00
不知道是不是这样理解:
AND是按位与&
OR是按位或|
然后:
用a&!a|c 判断C的值:
#include <stdio.h>
#include <stdlib.h>
void Func(int a,int b,int c) //为什么用void Func(bool a,bool b,bool c)不行呢?
{
printf("a=%d\nb=%d\n",!a,!b); //不知bool能不能像这样输出?
if(a&(!a)|c)
printf("a=%d\n",0);
else
printf("a=%d\n",1);
}
int main()
{
Func(1,0,1);
system("pause");
return 0;
}
板凳
euc [专家分:4310] 发布于 2007-03-05 14:15:00
还是规定用& ~ | 吧,因为输入只有1和0.题目是让输入三个数,输出三个数的非,但只能用两个~.
3 楼
freeeerf [专家分:5440] 发布于 2007-03-05 22:48:00
似乎只用一个|就可以搞定:
if(a|0) //如果成立,a就是true.
printf("false\n");
else
printf("No\n");
其它二个也可以这样来.
这样理解题目感觉有点不妥,究竟什么是黑盒呢?
4 楼
euc [专家分:4310] 发布于 2007-03-06 13:51:00
是这样,把a,b,c转换为~a,~b,~c,我们设计中间转换步骤...
5 楼
argentmoon [专家分:13260] 发布于 2007-03-06 22:24:00
answer?
6 楼
海上飞洪 [专家分:520] 发布于 2007-03-07 00:27:00
题目的意思还真难理解
7 楼
renew [专家分:200] 发布于 2007-03-08 02:32:00
蛮有意思的题目,不知我这样子搞有没有符合要求(有点投机取巧的味道^_^)。
#include <stdio.h>
int xor(int a, int b)
{
return (a&~b)|(b&~a);
}
int main()
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
printf("%d %d %d\n", xor(a, 1), xor(b, 1), xor(c, 1));
return 0;
}
如果可以用if语句或者“^”运算的话就不需要用到“~”了 -,-
lz的要求似乎还不够明确
8 楼
euc [专家分:4310] 发布于 2007-03-08 12:09:00
蛮好的! 应该不符合要求吧,应该同时输出三个结果,而不是先后调用三次xor,看看有没有更吊的方法了?
9 楼
bpttc [专家分:8790] 发布于 2007-03-08 19:32:00
还没想出来 好像要大量使用摩根律....
10 楼
freeeerf [专家分:5440] 发布于 2007-03-12 19:53:00
if(a|0) //如果是真就让它为0,其它两个也可以这样做.感觉不难啊.难道我理解错了.
a=0;
else
a=1;
我来回复