遞迴法 財務金額漏掉1筆或者幾筆(排列組合)

2021-10-02 19:27:19 字數 1355 閱讀 3280

問題:某財務部門結賬時發現金額不對,很可能是從明細上漏掉了一筆或者幾筆,如果已知明細賬目清單,能通過程式設計找到漏掉的是哪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 ...