请在Chrome、Firefox等现代浏览器浏览本站。如果需要合作请 点击 加我 QQ 说你的需求。

2011网易公司笔试题

图书网课 admin

请编写一个程序,能打印出如下规律的字符: (a)(b)(c)...(z)(a,b)(a,c)...(a,z)...(b,c)(b,d)...(b,z)...(y,z)...(a,b,c)(a,b,d)...(a,b,z)...(x,y,z)...(a,b,c,d...z) 刚开始一看这个题,感觉很复杂,似乎没有什么思

  请编写一个程序,能打印出如下规律的字符:

  (a)(b)(c)...(z)(a,b)(a,c)...(a,z)...(b,c)(b,d)...(b,z)...(y,z)...(a,b,c)(a,b,d)...(a,b,z)...(x,y,z)...(a,b,c,d...z)

  刚开始一看这个题,感觉很复杂,似乎没有什么思路,只能想到用递归,但具体怎么写呢?

  但再仔细一分析,我们可以把上面的字符分成以下几类:

  只有一个字符的:(a),(b),(c)....

  有两个字符的:(a,b),(a,c)...(b,d)...(y,z)

  ......

  有26个字符的:(a,b,c...z)

  再仔细看一下每一种情况,不就是求(a-z)的组合数嘛。所以问题一下变得简单了。

  ?1 #include

  ?2 #include

  

  ?3

  ?4 char?array[]="abcdefghijklmnopqrstuvwxyz";

  ?5

  ?6 #define N

  26

  ?7

  ?8 //A simple queue

  ?9 int?queue[N]={0};

  10 int?top=0;

  11

  12 //output the combination of array, whose letter size is cnt.

  13 void?combination(int?start,int?cnt)

  14 {

  15 int?i;

  16

  17 //reach the end of array, return

  18 if?(start > N)

  19 return?;

  20

  21 //the queue has cnt letters, output it

  22 if?(top==cnt)

  23 {

  24 printf("{");

  25 for?(i=0; i < cnt-1; i++)

  26 {

  27 printf("%c,", queue[i]);

  28 }

  29 printf("%c}", queue[i]);

  30 return?;

  31 }

  32

  33 queue[top++]=array[start];

  34 combination(start+1, cnt);

  35 top--;

  36 combination(start+1, cnt);

  37 }

  38

  39 void?magic_print()

  40 {

  41 int?i;

  42

  43 for?(i=1; i <=26; i++)

  44 {

  45 printf("--------------cnt=%d------------------\n",

  i);

  46 combination(0, i);

  47 getchar();

  48 }

  49 }

  50

  51 int?main()

  52 {

  53 magic_print();

  54 return?0;

  55 }

  56

  57

  58

喜欢 (0) or 分享 (0)