2016年C语言面试算法题(附答案)

发布时间:2016-10-22 00:00:00 编辑:嘉辉 手机版

  1.求组合数: 求n个数(1....n)中k个数的组合....

  如:combination(5,3)

  要求输出:543,542,541,532,531,521,432,431,421,321,

  /*

  求组合数: 求n个数(1....n)中k个数的组合....

  如:combination(5,3)

  要求输出:543,542,541,532,531,521,432,431,421,321,

  */

  #include

  #include

  int pop(int *);

  int push(int );

  void combination(int ,int);

  int stack[3]={0};

  int top = -1;

  int main()

  {

  int n,m;

  n = 5;

  m = 3;

  combination(n,m);

  printf("\n");

  }

  void combination(int m,int n)

  {

  int temp = m;

  push(temp);

  while(1)

  {

  if(1==temp)

  {

  if(pop(&temp) && stack[0]==n)

  break;

  }

  else if(push(--temp))

  {

  printf("%d%d%d\n",stack[0],stack[1],stack[2]);

  pop(&temp);

  }

  }

  }

  int push(int i)

  {

  stack[++top]=i;

  if(top<2)

  return 0;

  else

  return 1;

  }

  int pop(int *i)

  {

  *i = stack[top--];

  if(top>=0)

  return 0;

  else

  return 1;

  }

  2.、用指针的方法,将字符串“ABCD1234efgh”前后对调显示

  #include

  #include

  int main()

  {

  char str[]="ABCD123efgh";

  int length = strlen(str);

  char *p1= str;

  char *p2 = str+length -1;

  while(p1

  {

  char c = *p1;

  *p1 = *p2;

  *p2 = c;

  ++p1;

  --p2;

  }

  printf("str now is %s\n",str);

  return 1;

  }

  3.给定字符串A和B,输出A和B中的最大公共子串。比如A="aocdfe" B="pmcdfa" 则输出"cdf"

  #include

  #include

  #include

  char *commanstring(char shortstring[],char longstring[])

  {

  int i,j;

  char *substring = malloc(256);

  if(strstr(longstring,shortstring)!=NULL)

  return shortstring;

  for(i=strlen(shortstring)-1;i>0;i--)

  {

  for(j=0;j<=strlen(shortstring)-i;j++)

  {

  memcpy(substring,&shortstring[j],i);

  substring[i]='\0';

  if(strstr(longstring,substring)!=NULL)

  return substring;

  }

  }

  return NULL;

  }

  void main(void)

  {

  char *str1 = "aocdfe";

  char *str2 = "pmcdfa";

  char *comman = NULL;

  if(strlen(str1)>strlen(str2))

  comman= commanstring(str2,str1);

  else

  comman = commanstring(str1,str2);

  printf("the longest comman string is:%s\n",comman);

  }

本文已影响876
+1
0