1、现有一组数列,a1,a2,a3,......,an,其中a1=1,a2=2,后面的数y都由小于y的数x通过关系y=2*x+1,y=3*x+产生,这样的序列如下:1,2,3,4,5,7,9,10,11,13,15,16,17,19,21,22,23,25,27......输入第n个数,输出对应的数值。
如输入3,输出3;输入100,输出148。
int main()
{
printf("input n=");
int n = 0;
int An = 0;
scanf("%d",&n);getchar();
if(n==1 || n==2)
{
An = n;
}
else
{
if(n%2==0)
{
An = 3*((n-2)/2) + 1;
}
else
{
if((3*((n-1-2)/2) + 1 -1)%2 == 0)
{
An = 2*((n-1)/2 + 1) + 1;
}
else
{
An = 2*((n-1)/2) + 1;
}
}
}
printf("An = %d\n",An);
}
2、一个重复字符串是由两个相同的字符串首尾拼接而成,例如abcabc便是长度为6的一个重复字符串,而abcba则不存在重复字符串。给定任意字符串,找出最长重复字符串。
#include "common.h"
#include <algorithm>
int main()
{
char *p = new char [1024]();
printf("input the str:\n");
scanf("%s",p);
getchar();
vector <string> s_p;
char *p1 = nullptr;
char *p2 = nullptr;
for(int i = 0;i<strlen(p);i++)
{
p1 = p + i;
for(int j = i+1;j<strlen(p);j++)
{
p2 = p + j;
if( *p2 == *p1)
{
int len = j - i;
if(strlen(p) - j >= len)
{
char buf1[512] = {0},buf2[512] = {0};
memcpy(buf1,p1,len);
memcpy(buf2,p2,len);
if(strcmp(buf1,buf2) == 0)
{
char buf3[1024] = {0};
memcpy(buf3,p1,2*len);
string s = buf3;
s_p.push_back(s);
}
}
}
}
}
if(s_p.size() == 0)
{
printf("NO ...\n");
}
for(int i = 0;i<s_p.size();i++)
{
cout<<"--- "<<s_p[i]<<endl;
}
string s_max = s_p[0];
for(int i = 1;i<s_p.size();i++)
{
if(s_max.size() < s_p[i].size())
{
s_max = s_p[i];
}
}
cout<<"max: "<<s_max<<endl;
}