L1-054 福到了
作者:
lvjj
,
2024-03-28 23:22:10
,
所有人可见
,
阅读 6
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
char m;//替换每个字符,所以用char,而不是string
cin>>m>>n;
string str;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
//如果先cin,后有getline,需要用这代码消掉\n
//cin.ignore();在“这一题”好像也行?后面再看看
vector<vector<string>> vec(n);
for(int i=0;i<n;i++){
getline(cin,str);
for (auto &c : str) { //只要对原来的数进行变更操作,要加&引用,
if (c == '@') {
c = m;
}
}
vec[i].push_back(str);
}
int d=0;//用一个d传递是否对称的信号
//初始化后,需要判断vec是不是上下对称,是的话就不用倒了
int a=0,b=n-1;//俩指针指向第0行和第n-1行
int temp=0;
for(int j=0;j<n/2;j++){
if(vec[a]==vec[b]) temp++;//记录有上下多少对相等,temp用于判断何时把所有元素都遍历了
if(temp==n/2){
cout<<"bu yong dao le"<<endl;
d=1;//d=1说明是对称的,不等于1就是不对称的
}
a++;//头指针
b--;//尾指针
}
if(d!=1){//d不为一,说明不对称
reverse(vec.begin(), vec.end()); //上下逆转
for(int i=0;i<vec.size();i++){//左右逆转
for (auto& vv : vec[i]) { //遍历的是每一行的元素,对其逆置操作 (使用引用在for循环中允许直接修改容器中的元素,而不是它们的拷贝。)
reverse(vv.begin(), vv.end());
}
}
}
if(n==1)cout<<"bu yong dao le"<<endl;//特判
for(int i=0;i<vec.size();i++){
for(auto v:vec[i]) cout<<v<<endl;
}
return 0;
}