題目需求復述
- 輸入
N (2≤N≤100) 個數字 (0-9)。
- 輸入
M 個查詢數字對 (a, b)。
- 輸出每對在序列中相鄰出現的次數:
(a,b)=count,找不到輸出 Not Found!。
算法思路
- 讀入序列存入數組
num[100]。
- 對每個查詢對
(x, y),遍歷序列 i=0..N-2,若 num[i]==x && num[i+1]==y 計數++。
- 時間複雜度
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),極大提升性能。