面试的算法1(C语言)(整理)(组合数 字符串倒置 最大公共串)
2015-08-08 21:52
471 查看
/* 求组合数: 求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++ 4000 ) 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); else comman = commanstring(str1,str2); printf("the longest comman string is:%s\n",comman); }
相关文章推荐