如题,抽象本题的重点在于以下几点:
1.输入一个字符串并匹配一个专属的数字
2.将每一个字符串后n位按照原顺序前置
对于要点1,此处采用自定义类型压入vector解决;对于要点2,采用双循环遍历解决。
具体见代码:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
struct yuansu{
string s;
int num;
//自定义类型符合题意要求
};
int main(int argc, char** argv)
{
vector<yuansu> V;
int n=0;
cin>>n;
for(int i=1;i<=n;i++)
{
yuansu temp;
cin>>temp.s;
cin>>temp.num;
V.push_back(temp);
}
//接受题干数据
vector<string> G;
//G用来存放处理后的字符串
for(int i=0;i<=V.size()-1;i++)
{
string linshi;
//临时的字符串
string goal=V[i].s;
int n=V[i].num;
int length=goal.size()-1;
//获取当前元素的字符串和数字M,以及当前字符串的下标最大值
for(int j=length,k=1;k<=n;j--,k++)
{
//从最后一个字符开始操作,选取n个字符(即题干中的M)
linshi+=goal[j];
//采用字符串的加法赋值
}
reverse(linshi.begin(),linshi.end());
//注意!由于字符串的加法是将新的字符加到最后面,所以此处先进行翻转使其符合题意
for(int p=0;p<=length-n;p++)
{
linshi+=goal[p];
//将前length-n个不需要翻转的字符串补充进去
}
G.push_back(linshi);
//压入G中,进行下一组元素的操作
}
for(vector<string>::iterator it=G.begin();it!=G.end();it++)
cout<<(*it)<<endl;
//遍历G,得出答案
return 0;
}
加入一个藏头诗版的测试用例:完美AC