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

C 語言費波納契區間查詢:另一種陣列生成與雙指針輸出寫法

     編輯:程式設計疑難解答

代碼示例

#include 
int main() {
    int f[100];
    f[0] = 1; f[1] = 1;
    for (int i = 2; i < 100; i++) f[i] = f[i-1] + f[i-2]; // 預生成

    int m, n; scanf("%d %d", &m, &n);
    if (m > n) { int t=m; m=n; n=t; }

    int i = 0;
    while (f[i] < m) i++;           // 定位到第一個 >= m
    for (; f[i] <= n && f[i] > 0; i++) { // 輸出區間內 (且未溢位)
        printf("%d ", f[i]);
    }
    printf("\n");
    return 0;
}

優缺點分析

  • 優點:生成與查詢分離清晰;while 定位起始點避免全陣列遍歷 (雖 N 小無影響)。
  • 隱患:f[i] > 0 判斷溢位不嚴謹 (溢位未定義行為不一定變負);建議生成階段記錄有效長度 len。
  • 格式:末尾多一空格,嚴格 OJ 可能扣分,可用 first 旗標修正。

改進版

int len = 0;
for (int i = 2; i < 100; i++) {
    f[i] = f[i-1] + f[i-2];
    if (f[i] < 0) break;
    len = i + 1;
}
int first = 1;
for (int i = 0; i < len; i++) {
    if (f[i] >= m && f[i] <= n) {
        if (!first) printf(" ");
        printf("%d", f[i]);
        first = 0;
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved