把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。
接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。
得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。
好好反省:
思路很简单,我草——想错了,光手算了一下,abcdefghijklmnopqrsab.......删除下标为奇数的,我就想着只在一个a——s进行就行了,突然明白总个数为奇数,这样在字符串里删除的就不一直是同一个了,正确方法用vector就可以了
顺便学习一下vector中的assign
函数原型是:
1:void assign(const_iterator first,const_iterator last);
2:void assign(size_type n,const T& x = T());
第一个相当于个拷贝函数,把first到last的值赋值给调用者;(注意区间的闭合)
第二个把n个x赋值给调用者;
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
vector<int> v1,v2;
for(int i=0;i<10;i++)
v1.push_back(i);
v2.assign(v1.begin(),v1.begin()+5);//相当于拷贝函数,把v1 first到 last的值赋给v2
for(int i=0;i<v2.size();i++)
cout<<v2[i]<<" ";
cout<<endl;
v2.clear();
v2.assign(10,7);//把10个7赋值给v2
for(int i=0;i<v2.size();i++)
cout<<v2[i]<<" ";
cout<<endl;
return 0;
}
代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
vector<char> v1;
for(int i=0;i<2014;i++){
v1.push_back('a'+i%19);
}
//cout<<v1.size()<<endl;
while(v1.size()!=1){
vector<char> v2;
for(int i=1;i<v1.size();i+=2){
v2.push_back(v1[i]);
}
v1.assign(v2.begin(),v2.end());
//cout<<v1.size()<<endl;
}
cout<<v1[0]<<endl;
return 0;
}