問題:某財務部門結賬時發現金額不對,很可能是從明細上漏掉了一筆或者幾筆,如果已知明細賬目清單,能通過程式設計找到漏掉的是哪1筆或者幾筆嗎?
如果有多種可能,則輸出所有可能的情況
我們規定,使用者輸入的第一行是:有錯的總金額。
接下來是乙個整數n,所有可能漏掉的金額組合,每個情況1行,金額按照從小到大排列,中間用空間分開
比如:使用者輸入:賬目的明細65
324 //我們把3,2,4,3,1相加之後大於631
表明:有錯的總金額是6,明細共有5筆
此時,程式應該輸出:有錯的組合忘記加的
1 3 3
1 2 4
解決方法是:排列組合的問題
a b c d e f
漏掉的情況可能有 a e
a c f
a b c …
package mingxi;
public
class
mingxi
if(k>=a.length)
//k超出陣列範圍
return
;//分為以下兩種情況
b[k]
=false
;//假設b的第k項不取
f(err_sum,a,k+
1,total_sum,b)
;//a[k]不加total中
b[k]
=true
;//假設b的第k項取
total_sum+=a[k]
;//考慮a[k]是否要加在total_sum中
f(err_sum,a,k+
1,total_sum,b)
;//得到的遞迴情況
b[k]
=false
;//回溯!!!;因為前面b取過true
}public
static
void
main
(string[
] args)
;//明細賬目,怎樣經過相加計算才能和已知的和匹配
boolean
b=newboolean
[a.length]
;//表示a的對應項是否選取f(
6,a,0,
0,b)
;//引數傳遞
執行結果:
第一行:陣列的0和2分別對應明細的3和4;去掉這兩項相加為6
第二行:陣列0 3 4去掉對應的這三項,相加結果為6.
第三行:…
以上我求的是第幾項資料被漏掉
遞迴法排序
include stdio.h define max 100 void qsort int v,int left,int right main void qsort int v,int left,int right void swap int v,int i,int j 主程式為測試程式,程式的核心...
遞迴 遞迴法解決排列問題
方法1 程式大致結構 約定 pl len pl 為最終放置結果的陣列 len為陣列的長度 ele為參與排列的個元素出現的個數 i為pl中下標 假設參與排列的元素有abcd run ele,int i 注意 在遞迴塊內,不應對所傳入的引數進行改變 每個遞迴塊所得到的原始引數應保持一致。舉例 abcde...
遞迴法(非遞迴法)遍歷二叉樹
2.4 用 遞迴法 非遞迴法 實現先序遍歷 中序遍歷和後序遍歷函式,要求遍歷時能執行一定的操作,且該操作可由遍歷函式的呼叫者來設定。define tree type int typedef struct tree nodetreenode 先序遍歷與建立二叉樹 遞迴法 include tree.h ...