尽可能做一个操作的函数
Function to do an operation as much as possible
我是编程新手,我想在对 A 应用以下操作后查看 A 是否等于 B。`
- 如果A=1,则A=A。
- 如果A是偶数,则A = A/2.
- 如果A是奇数,则A = A*3+1。
如果 A 等于 B 则输出 Yes,否则输出 No。
我使用以下代码:
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
getchar();
if (a == 1) {
a = a;
}
else if (a % 2 == 0) {
a = a / 2;
}
else if (a % 2 == 1) {
a = a * 3 + 1;
}
if (a == b) {
printf("Yes\n");
}
else {
printf("No\n");
}
return 0;
}
这很好用,但我想尽可能多地进行手术。例如如果 A=12 且 B=5 -> 12/2=6 ->6/2=3->3+2=5。因此A=B。我使用什么功能来做到这一点?
这将是一个很好的 while
循环应用程序:
while(a != 1 && a != b) {
if(a % 2 == 0) {
a = a / 2;
} else if(a % 2 == 1) {
a = a * 3 + 1;
}
}
if(a == b) {
printf("Yes\n");
} else {
printf("No\n");
}
确保您了解循环条件,它决定了“尽可能多”的含义,以及为什么最终检查在循环体之外进行。
数字 4 和 2 是任何收敛序列的隐含部分,因为 4 = 3 * 1 + 1
和 2 = 4 / 2
。一个复杂的是将它们包括在内是让 a
在结束循环之前达到 1 两次。一个更简单的检查是将最后的 if
更改为
if(a == b || b == 4 || b == 2) {
由于 Collatz 猜想仍然是一个未解决的问题,因此无法保证循环在所有情况下都会收敛。同时,这也意味着没有人能够找到a
至少不达到统一的情况。
所有大于 2^68 的数字都显示收敛于 1。这意味着在支持 long double
的机器上,尾数精度为 80 位,或 128 位整数,你可以想象得到非收敛输入,或收敛到不同于一个的输入。因此,也许测试重新访问的数字比测试收敛到 1 更好。
我是编程新手,我想在对 A 应用以下操作后查看 A 是否等于 B。`
- 如果A=1,则A=A。
- 如果A是偶数,则A = A/2.
- 如果A是奇数,则A = A*3+1。
如果 A 等于 B 则输出 Yes,否则输出 No。 我使用以下代码:
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
getchar();
if (a == 1) {
a = a;
}
else if (a % 2 == 0) {
a = a / 2;
}
else if (a % 2 == 1) {
a = a * 3 + 1;
}
if (a == b) {
printf("Yes\n");
}
else {
printf("No\n");
}
return 0;
}
这很好用,但我想尽可能多地进行手术。例如如果 A=12 且 B=5 -> 12/2=6 ->6/2=3->3+2=5。因此A=B。我使用什么功能来做到这一点?
这将是一个很好的 while
循环应用程序:
while(a != 1 && a != b) {
if(a % 2 == 0) {
a = a / 2;
} else if(a % 2 == 1) {
a = a * 3 + 1;
}
}
if(a == b) {
printf("Yes\n");
} else {
printf("No\n");
}
确保您了解循环条件,它决定了“尽可能多”的含义,以及为什么最终检查在循环体之外进行。
数字 4 和 2 是任何收敛序列的隐含部分,因为 4 = 3 * 1 + 1
和 2 = 4 / 2
。一个复杂的是将它们包括在内是让 a
在结束循环之前达到 1 两次。一个更简单的检查是将最后的 if
更改为
if(a == b || b == 4 || b == 2) {
由于 Collatz 猜想仍然是一个未解决的问题,因此无法保证循环在所有情况下都会收敛。同时,这也意味着没有人能够找到a
至少不达到统一的情况。
所有大于 2^68 的数字都显示收敛于 1。这意味着在支持 long double
的机器上,尾数精度为 80 位,或 128 位整数,你可以想象得到非收敛输入,或收敛到不同于一个的输入。因此,也许测试重新访问的数字比测试收敛到 1 更好。