題目:給定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 出現了...