首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

猴子吃桃問題:遞推公式錯誤導致結果不對的修正版

     編輯:程式設計綜合問答

原始錯誤代碼

int a[SIZE]={0};
while(i==1) a[i]=1;      // i 未初始化,條件極難成立
for(i=2; i<=SIZE; ++i) { // 數組越界:a[SIZE] 超出範圍
    a[i]=2*(a[i-1]+1);
}

問題分析

  1. i 未初始化,while(i==1) 行為不確定。
  2. 數組下標 0..SIZE-1,循環到 i==SIZE 訪問 a[SIZE] 越界。
  3. 遞推邏輯:第 1 天剩 1 個,第 n 天早上剩 a[n] = 2*(a[n-1]+1)。

修正代碼

#include 
#define SIZE 11   // 需存 a[1]..a[10],故 SIZE=11
int main() {
    int i;
    int a[SIZE] = {0};
    a[1] = 1;                     // 第 1 天早上剩 1 個
    for (i = 2; i < SIZE; ++i) {  // i < SIZE 避免越界
        a[i] = 2 * (a[i-1] + 1);  // 逆推前一天早上數量
        printf("a[%d]=%d\n", i, a[i]);
    }
    return 0;
}

數學驗證

第 10 天早上(輸入樣例隱含 n=10)應為 1534 個,程式輸出 a[10]=1534 符合預期。

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