首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

PAT 基礎編程題解:分支結構判斷三球質量差異(天平找小球)

     編輯:關於C語言

題目描述

有三顆外觀相同的小球 A、B、C,其中兩顆質量相同,一顆不同。用天平比較質量,輸出質量不同的那顆小球標識(A/B/C)。

邏輯分析

三球質量 `mA, mB, mC`,恰有兩個相等、一個不同。所有可能情況:

情況條件輸出
A 不同mB == mC && mA != mBA
B 不同mA == mC && mB != mAB
C 不同mA == mB && mC != mAC

三個條件互斥且窮盡,按任意順序判斷均可。

代碼實現

#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;
}

關鍵考點

  1. 指針參數傳遞:函數接收 `int*`,通過解引用 `*pA` 訪問值
  2. 邏輯互斥:使用 `if-else if` 鏈避免重複判斷,雖然題目數據保證只有一個成立
  3. 地址輸出格式:`%p` 配合 `void*` 參數,標準輸出指針地址
  4. 提前退出:`exit(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 5p_A=..., p_B=..., p_C=...
C
A=B≠C → C 不同
10 5 10...B 不同
5 10 10...A 不同

總結

本題考察指針作為函數參數、多條件互斥判斷、地址輸出格式。邏輯極簡,關鍵在於正確建立三球質量關係的條件表達式。實戰中注意:輸入可能非整數(浮點需容差比較)、球數擴展至 N 顆(需排序或哈希計數)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved