轉載:http://bbs1.chinaunix.net/thread-1640178-1-1.html
有一個人站在電影院門口賣票,票價50,一開始手上沒有找零的錢,
現在有兩種人來買票,A拿着100元的錢,人數為m(m<20),B拿着50元的錢,
人數為n(n<20)。賣票的人必須用從B類人中那裡得來錢找給A,是以賣票
的順序是有限制的。
要求寫一個程式列印出所有的買票序列:
例如:m =2 ,n = 3;
BABAB
BBAAB
BBBAA
BBABA
#################################
1. #include <stdio.h>
2. char str[500];
3. int n, m;
4. void oper(int a, int b,int m, int n)
5. {
6. if (a + b == m + n)
7. printf("%s\n", str);
8. else {
9. if (a < m && a < b) {
10. str[a + b] = 'A';
11. oper(a + 1, b, m, n);
12. }
13. if (b < n) {
14. str[a + b] = 'B';
15. oper(a, b + 1, m, n);
16. }
17. }
18. }
19. int main()
20. {
21. while (scanf("%d%d", &m, &n) == 2)
22. {
23. if (n < 0 || m < 0 || m > n)
24. printf("No result!\n");
25. else {
26. str[m + n] = 0;
27. oper(0, 0, m, n);
28. }
29. }
30. return 0;
31. }
##########實際上求組合############,再判斷條件。
#include <stdio.h>
char str[500];
int n, m;
void oper(int a, int b,int m, int n)
{
if (a + b == m + n)
printf("%s\n", str);
if (a < m){
str[a + b] = 'A';
oper(a + 1, b, m, n);
}
if (b < n){
str[a + b] = 'B';
oper(a, b + 1, m, n);
}
}
int main()
{
while (scanf("%d%d", &m, &n) == 2)
{
if (n < 0 || m < 0 || m > n)
printf("No result!\n");
else {
str[m + n] = 0;
oper(0, 0, m, n);
}
}
return 0;
}