回 帖 发 新 帖 刷新版面

主题:The 2-NOTs problem

设计一个黑盒,它接收A,B,C三个布尔数,输出NOT-A, NOT-B, and NOT-C.可以使用任意数量的AND和OR运算,但只能使用两次NOT运算.

回复列表 (共11个回复)

沙发

不知道是不是这样理解:
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;
}

板凳

还是规定用& ~ | 吧,因为输入只有1和0.题目是让输入三个数,输出三个数的非,但只能用两个~.

3 楼

似乎只用一个|就可以搞定:
if(a|0) //如果成立,a就是true.
  printf("false\n");
else
  printf("No\n");
其它二个也可以这样来.
这样理解题目感觉有点不妥,究竟什么是黑盒呢?

4 楼

是这样,把a,b,c转换为~a,~b,~c,我们设计中间转换步骤...

5 楼

answer?

6 楼

题目的意思还真难理解

7 楼

蛮有意思的题目,不知我这样子搞有没有符合要求(有点投机取巧的味道^_^)。

#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 楼

蛮好的! 应该不符合要求吧,应该同时输出三个结果,而不是先后调用三次xor,看看有没有更吊的方法了?

9 楼

还没想出来 好像要大量使用摩根律....

10 楼

if(a|0) //如果是真就让它为0,其它两个也可以这样做.感觉不难啊.难道我理解错了.
   a=0;
else
   a=1;

我来回复

您尚未登录,请登录后再回复。点此登录或注册