/1、最长公共子串
//比如 abcdef bcdegkkk ---> af gkkk
填空题,【】为题目给出的空
char* lcs(char *str1,char *str2)//寻找子串并返回
{
int len1,len2;
int i,j;
char *shorter,*longer,*substr;
if(str1 == NULL || str2 ==NULL)return NULL;
len1 = strlen(str1);
len2 = strlen(str2);
if(len1 < len2)
{
shorter = str1;
longer = str2;
}
else
{
shorter = str2;
longer = str1;
}
if(strstr(longer,shorter) != NULL) return shorter;//short 完全是long的子串
len1 = strlen(shorter);
substr = (char*)malloc(len1 + 1);
//strstr 函数原型 extern char *strstr(char *str1, const char *str2);
//str1: 被查找目标 string expression to search.
//str2: 要查找对象 The string expression to find.
//返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
//不完全是子串,所以需要对short的字符串进行分割
for(【int i=len1-1;i>0;--i】)//short子串为公共子串的大小 从大至小计数 总长len1,已确定不是完全子串,所以从len1-1开始判断
{
for(【int j=0;j<=len1-i;++j】)//
{//函数原型为void *memcpy(void *destin, void *source, unsigned n)
//从源source中拷贝n个字节到目标destin中
memcpy(substr,&shorter[j],i);//该语句意为 从j位开始,复制i位至substr;在此循环中可理解为 i从大至小,起始点从小到大
//例:len=6,则i=5,复制从0-4;for循环第二遍则复制 1-5;i=4,复制0-3,1-4,2-5
substr[i] ='\0';
//整个函数的意思为循环遍历长度逐渐减小的子串的所有可能
if(strstr(longer,substr) != NULL) return substr;
}
}
return NULL;
}
2、
//数列由3和5组成的数,按从小到大排序
//3,5,33,35,53,333,335,353,355,533,535,553,555,3333
// 对应每个数字序号依次为1,2,3,4,5,6,7,8.9,10,
//编写一个程序,实现输入序号N输出其对应数列中第N 个数
//输入 7 输出 333
//先算出N是所在等比数列第几个,然后计算该值是2的几次方(x),
//该x就是位数 且等比数列区间内数字就是从0~X的一进制排列,根据该一进制位印出3和5即可
填空题,【】为题目的空
#include
#include
#include
using namespace std;
int main()
{
int k;
while(cin>>k)
{
unsigned long long sum=0,num=1;
unsigned int len=1;
for(;;++len)
{
【num=pow(2,len);】//2 4 8
【sum+=num;】//2,6,14 序列的开始
if(k<=sum) break;
}
sum-=num;//假如输入为7,则 14-8=6
k=k-sum-1;//k=7, k-6-1=0
cout<<"print:___";
for(unsigned int i=len;i>=1;--i)
{
if(【((k>>(i-1))&1)==0】) 【cout<<3;】
else 【cout<<5; 】
}
cout<
填空题理解题意真要命~不给编译调试是真的狗