我需要用C语言编写一个程序来解决以下问题,但问题是我不能使用循环、条件或任何预定义的C函数

您将获得三个数字a∣b、a∣c和b∣c,其中∣表示逻辑运算符or.例如,3∣5=011∣101=111=7.系统将提示您在输出中打印a、b和c这三个数字.

显然,这个问题不一定有唯一的答案,您只需要输出一个有效的答案.

示例:

input: 5 7 7
output: 1 4 7

我试图将十进制输入的数字转换为二进制,但不使用循环就无法做到.

推荐答案

一次一点地看这个问题.定义d = a | be = a | cf = b | c.

  • 如果{d,e,f}的三个都是0,那么我们知道{a,b,c}也都是0.

  • 如果{d,e,f}中恰好有两个为0,这是不可能的,因 for each 变量{a,b,c}将迫使{d,e,f}中的两个为1.

  • 如果{d,e,f}中恰好有一个为0,则{a,b,c}中恰好有一个为1,其余为0.

  • 如果{d,e,f}中的任何一个都不是0,那么它在任何两个或三个可以为1的{a,b,c}中是不明确的.

它足以解决:a = d & e,b = d & f,c = e & f.

C++相关问答推荐

如何在C中的空指针函数中传递浮点值

从STdin读写超过4096个字节

常数函数指针优化

需要大整数和浮点数.使用long long int和long double

C语言中的strstr问题

以下声明和定义之间的区别

如何计算打印二叉搜索树时每行所需的空间?

不同出处的指针可以相等吗?

C I/O:在Windows控制台上处理键盘输入

使用nmake for程序比Hello World稍微复杂一些

Caesar密码调试:输出文本末尾的问号和随机字符

我应该在递归中使用全局变量吗

可以对两种 struct 类型中的任何一种进行操作的C函数

从文件到链表读取日期

在C中使用字符串时是否不需要内存分配?

与指针的原始C数组或C++向量<;向量<;双>>;

GDB 跳过动态加载器代码

C23 中是否有 __attribute__((nonnull)) 的等效项?

初始化动态分配的布尔二维数组的最佳方法是什么?

将十六进制值或十进制值分配给 uint16_t 有什么区别?