题目
输入样例 1:
$ 9
@ @@@@@
@@@ @@@
@ @ @
@@@ @@@
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
@ @ @ @
@ @@@@@
输出样例 1:
$$$$$ $
$ $ $ $
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$
$$$ $$$
$ $ $
$$$ $$$
$$$$$ $
输入样例 2:
& 3
@@@
@
@@@
输出样例 2:
bu yong dao le
&&&
&
&&&
思想
这道题用STL的几个函数和操作其实就很简单,其实题目就是让我们把图案中心对称操作后输出,然后判断一下旋转后的是否和原本输入的相同,相同则多一条输出。那么逆序输出用stack完事,里面的反转调用一下reverse函数,最后做个遍历判断就可以输出了。
AC代码
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pre(i,a,b) for(int i=a;i>=b;--i)
#define m(x) memset(x,0,sizeof x)
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define PI acos(-1)
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int mod = 1e9+7;
const int maxn = 1e2+10;
//s存的是存入的逆序字符串
stack<string>s;
//v存的是初始数据,便于后期比对
vector<string>v;
//ans存的是最后输出的答案
vector<string>ans;
int main()
{
char c;
int n;
scanf("%c %d",&c,&n);
string t;
//cout << c << " " << n << endl;
getchar();
for(int i=1;i<=n;++i)
{
getline(cin, t);
v.push_back(t);
s.push(t);
}
//cout << endl;
int cnt = 0;
bool f = false;
while(!s.empty())
{
string temp = s.top();
int len = (int)temp.size();
//翻转函数
reverse(temp.begin(), temp.end());
// cout << "***" << temp << endl;
// cout << "!!!" << v[cnt] << endl;
//如果出现任何一种情况不能满足就将f调为true
if(temp!=v[cnt])f = true;
//改为设定字符
for(int i=0;i<len;++i)if(temp[i]!=' ')temp[i] = c;
//cout << temp << endl;
ans.push_back(temp);
s.pop();
cnt++;
}
//翻转后相同就输出特定字符串
if(!f)cout << "bu yong dao le" << endl;
int len = (int)ans.size();
rep(i, 0 ,len-1)cout << ans[i] << endl;
return 0;
}