有三顆外觀相同的小球 A、B、C,其中兩顆質量相同,一顆不同。用天平比較質量,輸出質量不同的那顆小球標識(A/B/C)。
三球質量 `mA, mB, mC`,恰有兩個相等、一個不同。所有可能情況:
| 情況 | 條件 | 輸出 |
|---|---|---|
| A 不同 | mB == mC && mA != mB | A |
| B 不同 | mA == mC && mB != mA | B |
| C 不同 | mA == mB && mC != mA | C |
三個條件互斥且窮盡,按任意順序判斷均可。
#include <stdio.h>
#include <stdlib.h>
void compare(int *pA, int *pB, int *pC) {
if (*pA == *pB && *pA != *pC) {
printf("C\n");
} else if (*pA == *pC && *pA != *pB) {
printf("B\n");
} else if (*pB == *pC && *pB != *pA) {
printf("A\n");
}
exit(0); // 題目要求找到即退出
}
int main() {
int mA, mB, mC;
scanf("%d %d %d", &mA, &mB, &mC);
int *pA = &mA, *pB = &mB, *pC = &mC;
printf("p_A=%p, p_B=%p, p_C=%p\n", pA, pB, pC); // 題目要求輸出指針地址
compare(pA, pB, pC);
return 0;
}
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if (a == b) printf("C\n");
else if (a == c) printf("B\n");
else printf("A\n");
return 0;
}
原題要求使用指針函數,教學目的是練習指針參數。實際工程中簡單邏輯無需指針封裝。
| 輸入 | 輸出 | 說明 |
|---|---|---|
| 10 10 5 | p_A=..., p_B=..., p_C=... C | A=B≠C → C 不同 |
| 10 5 10 | ... | B 不同 |
| 5 10 10 | ... | A 不同 |
本題考察指針作為函數參數、多條件互斥判斷、地址輸出格式。邏輯極簡,關鍵在於正確建立三球質量關係的條件表達式。實戰中注意:輸入可能非整數(浮點需容差比較)、球數擴展至 N 顆(需排序或哈希計數)。