当用户输入 3 时,它会打印 7 作为输出,当用户输入 7 时,它会打印 3 作为输出,但不使用任何条件和循环。
这就是我所做的。问题是我使用 2 个数字作为输入,但我必须用一个输入来完成。
void main() {
print(mod(7, 3));
}
int mod(int num1, int num2) {
//3*2 mod 7
//7*2 mod 3
int answer = (num1 * 2) % num2 + 1;
return answer;
}
您可以使用任何语言来解决这个问题。
让我们看一下 3 和 7 的二进制表示:3 是
0...0011
,7 是 0...0111
,这意味着 3 和 7 之间唯一不同的位是第 3 位。因此,我们可以简单地通过“翻转”第 3 位来将 3 转换为 7,反之亦然。
“翻转一点”可以通过“异或”运算来完成。 Xor 是一个非常有用的操作(我最喜欢的操作之一):一种看待它的方法是考虑你有一个数据输入和一个控制输入,如果控制输入为 0,则数据输入保持不变,但是如果控制输入为 1,则翻转数据输入(您可以绘制 Xor 真值表来说服自己相信这种解释)。当然,这只是考虑异或运算的一种方法,但它在我们的情况下特别有用:我们想要翻转第三位,并保持所有其他位不变。
C 提供了“按位异或”运算(
A ^ B
),它对 A 和 B 的每一位进行异或。因此,我们想要的是有一个数字,我们将使用它作为控制数字,即第 3 位是 1 并且所有其他位都是 0:这个数字是 4。
最后,我们只需将 4 与输入进行异或运算,就可以让这个函数将 3 转换为 7,反之亦然。
#include <stdio.h>
int flip(int num1) {
return num1 ^ 4;
}
void main() {
printf("%d", flip(3));
}
给你:
void main() {
print('Enter a number (3 or 7):');
var input = int.parse(stdin.readLineSync());
// Calculate the swapped value
var result = 10 - input;
print('Output: $result');
}