本文主要是介绍2011蓝桥杯第六题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这道题目要求我们求两个8位数中最长的公共字串,核心是枚举,思路是:首先将数字转化为字符串,顺次扫描其中任意一个字符串,对每一个字符,判断以其为首的长度依次递增的字符串是否为公共字串,若是,则与当前最大公共子串比较,枚举所有的子串从而求得最大公共子串长度。下面是代码:#include <stdio.h>
#include <stdlib.h>
#include <cstring>
int a,b;
int g(int a,int b){char sa[9];//"00000000";char sb[]="00000000";int n=0;int i,j;sprintf(sa,"%8d",a);sprintf(sb,"%8d",b);printf("%s\n",sa);for(i=0;i<8;i++){for(j=1;j<=8-i;j++){char t=sa[i+j];sa[i+j]=0;if(strstr(sb,sa+i))if(j>n)n=j;sa[i+j]=t;}}return n;
}
其中sprintf函数的用法直到这道题才了解,没想到这么方便,就可以将整数转化为字符串。另外注意0是‘\0'的scall值,没有读懂这个就很难理解这道题。strstr(source ,target)函数是从source字符串中查找target字符串,若有则返回其在source中第一个字符的地址,否则返回NULL。
这篇关于2011蓝桥杯第六题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!