蓝桥杯 - 猜字母
标题:猜字母
把abcd…s共19个字母组成的序列重复拼接106次,得到长度为2014的串。
接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。
得到的新串再进行删除奇数位置字母的动作。
如此下去,最后只剩下一个字母,请写出该字母。
答案是一个小写字母,请通过浏览器提交答案。
不要填写任何多余的内容。
代码1:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 string s="abcdefghigklmnopqrs"; 7 string str; 8 9 for(int i=0;i<106;i++) 10 { 11 str+=s; 12 } 13 14 while(str.length()>1) 15 { 16 for(int i=0;i<str.length();i++) 17 { 18 str.erase(i,1); //str的erase函数每次删除一个,长度-1,下一次删除就是原来字符串间隔一个 19 } 20 } 21 cout<<str; 22 return 0; 23 }
代码2:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 char a[2020], s[20] = "abcdefghijklmnopqrs"; 7 for(int i = 0; i < 106; i++) 8 strcat(a, s); 9 10 int k=0; 11 12 while(k != 1) //k是剩下的字符串的长度,当剩下的的字符串长度为1时,结束循环 13 { 14 k = 0; //每次循环k初始化为0 15 for(int i = 0; a[i]; i++) 16 { 17 if(i % 2 == 1) //删除奇数,则要取奇数下标的数,下标从0开始,所以对2取余为1 18 a[k++] = a[i]; 19 } 20 21 a[k] = '\0'; 22 } 23 24 cout << a; 25 }
代码3:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 char s[2020]; 7 char a[]="abcdefghijklmnopqrs"; 8 for(int i=0;i<106;i++) 9 { 10 strcat(s,a); 11 } 12 while(strlen(s)!=1) 13 { 14 int a=0,b=0; 15 while(s[a]=s[b++]) 16 { 17 if((b+1)%2) 18 { 19 a++; 20 } 21 } 22 } 23 cout<<s; 24 return 0; 25 }