zoukankan      html  css  js  c++  java
  • C语言面试算法题(一)

    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 <stdio.h>
    #include <error.h>
    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 <stdio.h>
    #include <string.h>
    int main()
    {
      char str[]="ABCD123efgh";
      int length = strlen(str);
      char *p1= str;
      char *p2 = str+length -1;
      while(p1<p2)
      {
        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 <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    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);
      
     }

  • 相关阅读:
    左偏树
    论在Windows下远程连接Ubuntu
    ZOJ 3711 Give Me Your Hand
    SGU 495. Kids and Prizes
    POJ 2151 Check the difficulty of problems
    CodeForces 148D. Bag of mice
    HDU 3631 Shortest Path
    HDU 1869 六度分离
    HDU 2544 最短路
    HDU 3584 Cube
  • 原文地址:https://www.cnblogs.com/lzjsky/p/1936393.html
Copyright © 2011-2022 走看看