欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

面试的算法1(C语言)(整理)(组合数 字符串倒置 最大公共串)

发布时间:2025/10/17 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 面试的算法1(C语言)(整理)(组合数 字符串倒置 最大公共串) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
/*求组合数: 求n个数(1....n)中k个数的组合....如:combination(5,3)要求输出:543,542,541,532,531,521,432,431,421,321, *///方法1 #include <stdio.h> #include<malloc.h> int *a,n,k;; int counts=0; void comb(int m,int k) { int i,j;for (i=m;i>=k;i--){ a[k]=i;if (k>1)comb(i-1,k-1);else{ counts++; for (j=a[0];j>0;j--)printf("%d ",a[j]);printf("\n");}} } void main() { printf("Please input n:");scanf("%d",&n);printf("Please input k:");scanf("%d",&k);a=(int*)malloc(sizeof(int)*(k+1));a[0]=k;comb(n,k);printf("All kinds is:%d\n",counts); }//方法2 #include<stdio.h> #include<malloc.h> int n,k,*a; void comb(int N,int K) {int i;int cnt=k-K;if(cnt<k){for(i=N;i>=k-cnt;i--){a[cnt]=i;comb(i-1,K-1);}}else{for(i=0;i<k;i++)printf("%d ",a[i]);printf("\n");} } void main() {printf("Please input n:");scanf("%d",&n);printf("Please input k:");scanf("%d",&k);a=(int*)malloc(sizeof(int)*k);comb(n,k); } /* 用指针的方法,将字符串“ABCD1234efgh”前后对调显示 */ #include <stdio.h> #include <string> void main() {char str[]="ABCD1234efgh";printf("原字符串:%s\r\n",str);char temp;int length;length=strlen(str);char *p1,*p2;p1=str;p2=(str+length-1);int cnt=length/2;while(cnt--){temp=*p1;*p1=*p2;*p2=temp;p1++;p2--;}printf("倒置的字符串:%s\r\n",str); } /* 给定字符串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 =(char*) malloc(256);if(strstr(longstring,shortstring)!=NULL)//shortstring完全在longstring中出现//strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址;如果未找到所搜索的字符串,则返回NULL。//char *strstr(char *str1, const char *str2);//str1被查找目标 str2: 要查找对象<span style="white-space:pre"> </span>return shortstring;for(i=strlen(shortstring)-1;i>0;i--)//i复制的字符个数{for(j=0;j<=strlen(shortstring)-i;j++)//j控制从shortstring第几位开始复制{memcpy(substring,&shortstring[j],i);//memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。//void *memcpy(void *dest, const void *src, size_t n);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);elsecomman = commanstring(str1,str2);printf("the longest comman string is:%s\n",comman); }


总结

以上是生活随笔为你收集整理的面试的算法1(C语言)(整理)(组合数 字符串倒置 最大公共串)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。