我是編程新手,在對 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。我用什么功能來做到這一點?
uj5u.com熱心網友回復:
這將是一個很好的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) {
由于 Collat??z 猜想仍然是一個未解決的問題,因此不能保證回圈在所有情況下都會收斂。同時,這也意味著沒有人能夠找到a至少達不到統一的案例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/379846.html
上一篇:抽象出init函式的最佳方法?
