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

C 語言實現數字對出現次數統計:輸入處理、邊界條件與完整代碼

     編輯:程式設計綜合問答

題目需求復述

  • 輸入 N (2≤N≤100) 個數字 (0-9)。
  • 輸入 M 個查詢數字對 (a, b)。
  • 輸出每對在序列中相鄰出現的次數:(a,b)=count,找不到輸出 Not Found!。

算法思路

  1. 讀入序列存入數組 num[100]。
  2. 對每個查詢對 (x, y),遍歷序列 i=0..N-2,若 num[i]==x && num[i+1]==y 計數++。
  3. 時間複雜度 O(M*N),最大 100*100=10,000 次操作,極快。

完整可編譯代碼 (C99 標準)

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int n, m;
    int seq[100];

    // 1. 讀取序列長度
    if (scanf("%d", &n) != 1 || n < 2 || n > 100) return 1;

    // 2. 讀取 N 個數字
    for (int i = 0; i < n; ++i) {
        if (scanf("%d", &seq[i]) != 1) return 1;
    }

    // 3. 讀取查詢對數
    if (scanf("%d", &m) != 1) return 1;

    // 4. 處理每個查詢
    for (int q = 0; q < m; ++q) {
        int a, b;
        if (scanf("%d %d", &a, &b) != 2) return 1;

        int count = 0;
        for (int i = 0; i < n - 1; ++i) {
            if (seq[i] == a && seq[i + 1] == b) {
                ++count;
            }
        }

        if (count > 0) {
            printf("(%d,%d)=%d\n", a, b, count);
        } else {
            printf("Not Found!\n");
        }
    }

    return 0;
}

關鍵細節說明

細節處理方式
輸入分隔符 scanf("%d") 自動跳過空白字符 (空格、換行、Tab),無需額外處理。
邊界 循環條件 i < n - 1 確保 seq[i+1] 不越界。
輸出格式 完全匹配樣例:(7,8)=2 無空格,Not Found! 大小寫、感嘆號。
多組測試數據 題目未說明多組,按單組處理。若需多組,外層包 while(scanf("%d",&n)==1)。

測試樣例

輸入:
20
0 1 5 9 8 7 2 2 2 3 2 7 8 7 8 7 9 6 5 9
3
7 8
8 7
9 0

輸出:
(7,8)=2
(8,7)=3
Not Found!

擴展:若 N 達 10^5,M 達 10^4

  • 預處理:構建 int freq[10][10] = {0},一次遍歷序列統計所有 100 種數字對頻次 O(N)。
  • 查詢直接 O(1) 看表輸出。
  • 總複雜度 O(N + M),極大提升性能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved