蓝桥杯2014年c组真题 猜字母 字符串

87 阅读1分钟

视频解析www.bilibili.com/video/BV1qE…

思想

我们可以先枚举第一个子串,每次删除奇数位置的数字,把没被删掉的数字组成一个新的字符串,当新的字符串长度为1的时候退出循环,这个时候仅剩的这个字符就是答案:

image.png

代码实现

我们可以利用数组的特性,每次删掉奇数位置的数字之后把剩下的数字往前挪动形成新的数组。

#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;
}

image.png 我们再带入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;
}

image.png

答案就是q