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

經典C語言題目:軟體工程師不吃不喝幾年能買北京房?

     編輯:關於C語言

問題背景

這是一道流傳已久的程式設計面試題:北京有一套房子,價格200萬元。假設房價每年上漲10%(每年漲幅按200萬基礎計算,即單利),一位軟體工程師年薪固定40萬元。若他不貸款、不漲薪、無其他收入,且每年「不吃不喝」將所有薪水儲蓄,請問需要幾年才能湊夠錢買下這套房子?

數學模型分析

設年數為 n 年:

  • 工程師總儲蓄 = 40 × n(萬元)
  • 房價 = 200 + 200 × 0.1 × n = 200(1 + 0.1n)(萬元)

求最小整數 n 使得:40n ≥ 200 + 20n → 20n ≥ 200 → n ≥ 10。

所以答案是 10年。

C語言實現

以下是兩種常見的程式碼寫法,均可得到正確結果:

版本一:直接用 while 迴圈判斷

#include <stdio.h>

int main() {
    int i = 0;
    float salary = 40;   // 年薪(萬)
    float value = 200;   // 初始房價(萬)
    float rate = 0.1;    // 漲幅 10%

    // 每年漲價額固定為 200萬 * 10% = 20萬
    while (salary * i < value + value * rate * i) {
        i++;
    }

    printf("經過 %d 年後,軟體工程師可以買到房子!\n", i);
    return 0;
}

版本二:帶有防無限迴圈保護

#include <stdio.h>

int main() {
    int i = 0, flag = 0;
    float salary = 40;
    float begin_value = 200;
    float rate = 0.1;
    float late_value = begin_value * rate + begin_value; // 第一年房價

    while (salary * i < late_value) {
        i++;
        late_value += late_value * rate; // 這裡改成複利,但題目要求單利
        if (i > 100) { // 防止邏輯錯誤導致無限迴圈
            flag = 0;
            break;
        }
    }

    if (flag)
        printf("經過 %d 年後,軟體工程師可以買到房子!\n", i);
    else
        printf("嗨,工作輩子,軟體工程師都不能買到房子,好慘哦!\n");

    return 0;
}

關鍵點提醒

  1. 單利 vs 複利:題目明確說明「每年上漲的價格是在200萬基礎上」,屬於單利計算。版本二錯誤地用了複利(late_value += late_value * rate),會導致答案偏大。
  2. 整數與浮點數:用 float 儲存金額足夠,但實際工程中建議用整數(分為單位)避免精度問題。
  3. 邊界條件:while 條件用 < 而非 <=,確保剛好湊夠時跳出迴圈。

延伸思考

若改為複利(房價每年在上一年基礎上漲 10%),方程變為 40n ≥ 200 × 1.1^n,此時方程無解析解,需用迴圈或二分法求解,答案約為 永遠買不起(房價增長快於儲蓄)。這也是版本二加入 i > 100 保護的原因。

程式執行結果截圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved