视频解析www.bilibili.com/video/BV1qE…
思想
我们可以先枚举第一个子串,每次删除奇数位置的数字,把没被删掉的数字组成一个新的字符串,当新的字符串长度为1的时候退出循环,这个时候仅剩的这个字符就是答案:
代码实现
我们可以利用数组的特性,每次删掉奇数位置的数字之后把剩下的数字往前挪动形成新的数组。
#include<iostream>
using namespace std;
int main()
{
int len=19;
char a[19];
int index=0;
//首先输入abcd…… s字母
for(int i=0;i<len;i++)
{
a[index++]='a'+i;
}
while(len!=1)
{ int k=0;
for(int i=1;i<len;i+=2)//i每次删除奇数位置的数字
{
a[k++]=a[i];
cout<<a[i];
}cout<<endl;
len=k;
}
return 0;
}
我们再带入2014个长度的字符串,我们只需要改一下输入部分和数组大小即可:
#include<iostream>
using namespace std;
int main()
{
int len=19;
char a[19];
int index=0;
//首先输入abcd…… s字母
for(int i=0;i<len;i++)
{
a[index++]='a'+i;
}
//检查一下输入的字符串2是否正确
for(int i=0;i<len;i++)
{
cout<<a[i];
}cout<<endl;
while(len!=1)
{ int k=0;
for(int i=1;i<len;i+=2)//i每次删除奇数位置的数字
{
a[k++]=a[i]; //往前挪动
cout<<a[i];
}cout<<endl;
len=k; //更新新的字符串长度
}
return 0;
}
答案就是q