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

  • 相关阅读:
    CodeForces 955D
    C# 基础复习三 C#7
    C#各版本新功能 C#7.3
    同步基元概述
    C#各版本新功能 C#7.1
    C#各版本新功能 C#6.0
    C#各版本新功能 C#7.0
    js加载事件和js函数定义
    java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES) 最蠢
    消息管理-activemq
  • 原文地址:https://www.cnblogs.com/lzjsky/p/1936393.html
Copyright © 2011-2022 走看看