[題目描述]:
乙個袋子裡面有n個球,每個球上面都有乙個號碼(擁有相同號碼的球是無區別的)。如果乙個袋子是幸運的當且僅當所有球的 號碼的和 大於所有球的 號碼的積。 例如:如果袋子裡面的球的號碼是,這個袋子就是幸運的,因為1 + 1 + 2 + 3 > 1 * 1 * 2 * 3 你可以適當從袋子裡移除一些球(可以移除0個,但是別移除完),要使移除後的袋子是幸運的。現在讓你程式設計計算一下你可以獲得的多少種不同的幸運的袋子。
輸入描述: 空第一行輸入乙個正整數n(n ≤ 1000) 第二行為n個數正整數xi(xi ≤ 1000)
輸出描述: 輸出可以產生的幸運的袋子數.
[解題思路]
這個解題思路是引用別人的,覺得這個思路特別好,呈現出來的**邏輯也是蠻不錯的,希望可以幫助到大家。
#include
#include
using namespace std;
/* **getluckypacket:從當前位置開始搜尋符合要求的組合,一直搜尋到最後乙個位置結束
x: 袋子中的所有球
n: 球的總數
pos: 當前搜尋的位置
sum: 到目前位置的累加和
multi: 到目前位置的累積值**
*/int getluckybocket
(int x[
], int n, int pos, int sum, int multi)
else
if(x[i]==1
)else
sum-=x[i]
; multi/=x[i]
;while
(i1&&x[i]
==x[i+1]
)}return count;
}int main()
sort
(x,x+n)
;//從第n個位置開始搜尋
cout<<
getluckybocket
(x,n,0,
0,1)
<}}
幸運的袋子
乙個袋子裡面有n個球,每個球上面都有乙個號碼 擁有相同號碼的球是無區別的 如果乙個袋子是幸運的當且僅當所有球的號碼的和大於所有球的號碼的積。例如 如果袋子裡面的球的號碼是,這個袋子就是幸運的,因為1 1 2 3 1 1 2 3 你可以適當從袋子裡移除一些球 可以移除0個,但是別移除完 要使移除後的袋...
幸運的袋子
乙個袋子裡面有n個球,每個球上面都有乙個號碼 擁有相同號碼的球是無區別的 如果乙個袋子是幸運的當且僅當所有球的號碼的和大於所有球的號碼的積。例如 如果袋子裡面的球的號碼是,這個袋子就是幸運的,因為1 1 2 3 1 1 2 3 你可以適當從袋子裡移除一些球 可以移除0個,但是別移除完 要使移除後的袋...
幸運的袋子
乙個袋子裡面有n個球,每個球上面都有乙個號碼 擁有相同號碼的球是無區別的 如果乙個袋子是幸運的當且僅當所有球的號碼的和大於所有球的號碼的積。例如 如果袋子裡面的球的號碼是,這個袋子就是幸運的,因為1 1 2 3 1 1 2 3 你可以適當從袋子裡移除一些球 可以移除0個,但是別移除完 要使移除後的袋...