1 昨天参加一公司笔试,给几道算法题整懵了,其实也不难,但好久没有碰算法,只是有思路,要让我在这么短的时间内写出程序来还是不行。
2 这里将其中一道稍微复杂一点的算法题写下来,以此小结。
3
4 题目描述:
5 将N个鸡蛋放入到M个篮子中去(N>M),保证每个篮子中至少一个鸡蛋,然后指定一个数X, 要求从篮子中找出任意个篮子,这些篮子中鸡蛋的总和加起来要等于X。请找出所有这样的情况。
6
7 思路:
8 由于N个鸡蛋放入M个篮子中有很多种放法,所以这里存在多种组合的情况。解决这个是第一步。
9 对于已经放好的篮子,又有很多种情况可以等于X。这是第二步。
10
11 第一步:
12 #define M 5 //basket number
13 #define N 20 //eggs number
14 #define X 8 //number to be specified
15 int eggs[M]; //egg baskets
16
17 //check whether this satisfies the condition
18 int check()
19 {
20 int i;
21 int sum;
22
23 sum = 0;
24 for (i =0; i < M; i++)
25 {
26 sum += eggs[i];
27 }
28 if (N == sum)
29 {
30 return 1;
31 }
32 return 0;
33 }
34
35 int put_egg(int remain_eggs,int index)
36 {
37 int i;
38 if (check() ==1)
39 {
40 for (i =0; i < M; i++)
41 {
42 cout << eggs[i] << " ";
43 }
44 cout << endl;
45 }
46 if (remain_eggs <=0 || index >= M)
47 {
48 return 0;
49 }
50
51 for (i = N; i >=1; i--)
52 {
53 if (remain_eggs >= i)
54 {
55 eggs[index] += i;
56 put_egg(remain_eggs-i, index+1);
57 eggs[index] -= i;
58 put_egg(remain_eggs, index+1);
59 }
60 }
61 return 0;
62 }
63
64 int my_put_egg()
65 {
66 int i;
67 int remain = N - M; //we put one egg into every basket.
68 for (i =0; i < M; i++)
69 {
70 eggs[i] = 1; //make sure every basket has one egg.
71 }
72 put_egg(remain, 0); //put the remain eggs into baskets.
73 return 0;
74 }
75
76 第二部分:
77 找出和等于X的组合:
78 int egg_stack[1024];
79 int basket_stack[1024];
80 int top =0;
81 int solve_sum(int array[],int sum,int basket_num)
82 {
83 int tmp;
84 if (sum <1 || basket_num <=0)
85 return 0;
86
87 tmp = array[basket_num-1];
88 if (sum > tmp)
89 {
90 egg_stack[top] = tmp;
91 basket_stack[top] = basket_num;
92 top++;
93 solve_sum(array, sum-tmp, basket_num-1);
94 top--;
95 solve_sum(array, sum, basket_num-1);
96 }
97 else if (sum < tmp)
98 {
99 solve_sum(array, sum, basket_num-1);
100 }
101 else
102 {
103 int i;
104 cout <<"[" << basket_num <<"]:" << sum;
105 for (i =0; i < top; i++)
106 {
107 cout <<" [" << basket_stack[i] <<"]:" << egg_stack[i];
108 }
109 cout << endl;
110 }
111 }
112
113 int main()
114 {
115 my_put_egg();
116 return 0;
117 }
118
119
面试笔试题
最新推荐文章于 2020-05-14 20:41:53 发布