?。?)選班委問(wèn)題:
從n個(gè)人中選k個(gè)人當班委(不區分職務(wù)),一共有多少種選法?
從數學(xué)的角度,我們可以直接計算出答案為CnK.
那用C語(yǔ)言怎么描述呢?我們這樣做:
先投票第一個(gè)人能否當班委:如果能,就從剩余的n-1個(gè)人中再選出k-1個(gè);如果不能,就從剩余的n-1個(gè)人中再選出k個(gè)。以此類(lèi)推,直到最后一個(gè)人。
view plain #include <stdlib.h> #include <stdio.h>
int calculate(int n, int k)
{ if (k > n)
return 0;else if (n == k || k == 0)
return 1;else return calculate(n - 1, k) + calculate(n - 1, k - 1);}
void main()
{ int n = 35;int k = 5;printf("result: %d\n", calculate(n, k));} view plain [root@ShiGuang test]# [root@ShiGuang test]# gcc main.c -o main [root@ShiGuang test]# ./main result: 324632 [root@ShiGuang test]#(2)漢諾塔問(wèn)題
漢諾塔是很經(jīng)典的遞歸算法,問(wèn)題我就不再描述了。
view plain #include <stdio.h>
void move(char x, char y);void hanoi(int n, char one, char two, char three);
int main()
{ int m;printf("input the number of diskes:");scanf("%d", &m);printf("The step to move %d diskes:\n", m);hanoi(m, 'A', 'B', 'C');}
void hanoi(int n, char one, char two, char three)
{ if (n == 1)
move(one, three);else { hanoi(n - 1, one, three, two);move(one, three);hanoi(n - 1, two, one, three);}
void move(char x, char y)
{ printf("%c ——> %c\n", x, y);}
聯(lián)系客服