計數問題(分治演算法實現)

2021-10-04 03:47:15 字數 1227 閱讀 8264

題目:給定n個整數的陣列a以及乙個數x,設計乙個分治演算法,求出x在陣列**現的次數,並分析時間複雜度。

先將問題劃分為大小近似相等的兩個字問題。

對子問題遞迴呼叫該演算法進行處理,遞迴出口為子問題只含乙個元素,若該元素等於x,則返回x的出現次數為1,若該元素不等於x,則返回0

原問題結果為這兩個子問題所得結果之和。

核心**:

int

countx

(int arr,

int p,

int r,

int x)

else

q=(p+r)/2

;//將問題不斷劃分為兩子問題,直到子問題只有乙個元素,遞迴結束

//q為陣列的中間位置

return

(countx

(arr,p,q,x)

+countx

(arr,q+

1,r,x));

//遞迴方程

}

完整**:

#include

intcountx

(int arr,

int p,

int r,

int x)

else

q=(p+r)/2

;//將問題不斷劃分為兩子問題,直到子問題只有乙個元素,遞迴結束

//q為陣列的中間位置

return

(countx

(arr,p,q,x)

+countx

(arr,q+

1,r,x));

//遞迴方程

}int

main()

;int x,n;

printf

("請輸入待查詢的資料!\n");

scanf

("%d"

,&x)

; n=

countx

(arr,0,

7,x);if

(n==0)

printf

("查無此資料!\n");

else

printf

("查到了!該資料在陣列中的個數為%d\n"

數字計數問題(演算法實驗)

時間限制 3000 ms 記憶體限制 65535kb 描述 一本書的頁碼從自然數 1開始順序編碼到自然數 n。書的頁碼按照通常的習慣編排,每個頁碼都不含多餘的前導數字 0。例如,第 6頁用數字 6表示,而不是 06或者 006等。數字計數問題要求對給定書的總也碼 n,分別計算出 0,1,9總共出現的...

計數問題(二)

計數問題 二 在上一講中,我們一起研究 列舉法 乘法原理 加法原理 在計數問題中的應用。但是,在實際的問題中,這些方法並不是單獨使用的。往往需要同時應用這幾種方法,這就需要我們搞清題意,根據已知條件,分別使用正確的方法,得到準確的結果。一 閱讀思考 例1.求720這個數約數的個數。分析與解 從1開始...

問題 E 計數問題

時間限制 1 sec 記憶體限制 128 mb 提交 30 解決 22 提交狀態 討論版 命題人 admin 題目描述 試計算在區間 1 到 n 的所有整數中,數字 x 0 x 9 共出現了多少次?例如,在 1 到 11 中,即在 1 2 3 4 5 6 7 8 9 10 11 中,數字 1 出現了...