2010年中興面試題
編程求解
輸入兩個(gè)整數(shù) n 和 m,從數(shù)列1,2,3.......n 中隨意取幾個(gè)數(shù),
使其和等于 m,要求將其中所有的可能組合列出來(lái)。
用一個(gè) n 位的數(shù)根據(jù)其每位是否為 1 來(lái)判斷是否選擇相應(yīng)的數(shù)。
實(shí)現(xiàn):
1 #include <iostream>
2 using namespace std;
3
4 void solve(int m, int a[], int n)
5 {
6 for (int i = 0; i < (1 << n); ++i)
7 {
8 int sum = 0;
9 int index = 0;
10 int t = i;
11 while (t != 0)
12 {
13 if (t % 2 == 1)
14 {
15 sum += a[index];
16 }
17 ++index;
18 t /= 2;
19 }
20 if (sum == m)
21 {
22 index = 0;
23 t = i;
24 while (t != 0)
25 {
26 if (t % 2 == 1)
27 {
28 cout << a[index] << ' ';
29 }
30 ++index;
31 t /= 2;
32 }
33 cout << endl;
34 }
35 }
36 }
37
38 int main()
39 {
40 int a[] = {1, 2, 3, 4, 5, 6, 7};
41 int n = 7;
42 int m = 10;
43 solve(m, a, n);
44
45 return 0;
46 }
posted on 2011-05-15 21:42
unixfy 閱讀(387)
評(píng)論(0) 編輯 收藏 引用