蓝桥杯真题:十字图(C++)
AC代码:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
const int MAX = 100;
int n,i,j;
string map[MAX];
cin>>n;
n = (n+1)*2;
//造了1/4的图
map[0]+="..";
map[0]+= string(n-2,'$');
map[1]+="..$";
map[1]+=string(n-3,'.');
map[2]+="$$$.";
map[2]+= string(n-4,'$');
for(i=3;i<=n;i+=2)
{
map[i]=map[i-2];
map[i].insert(0,"$.");
map[i].erase(n);
}
for(i=4;i<=n;i+=2)
{
map[i]=map[i-2];
map[i].insert(0,"$.");
map[i].erase(n);
}
//上面
for(i=0;i<n-1;i++)
{
cout<<map[i];
if(i%2==0)
{
cout<<"$";
}
else
{
cout<<".";
}
reverse(map[i].begin(),map[i].end());
cout<<map[i]<<endl;
reverse(map[i].begin(),map[i].end());
}
//中间
cout<<map[i];
cout<<"$";
reverse(map[i].begin(),map[i].end());
cout<<map[i]<<endl;
reverse(map[i].begin(),map[i].end());
i++;
map[i]="";
for(j=0;j<=n/2-2;j++)
{
map[i]+="$.";
}
map[i]+="$$$$$";
for(j=0;j<=n/2-2;j++)
{
map[i]+=".$";
}
cout<<map[i]<<endl;
//下面
cout<<map[i-1];
cout<<"$";
reverse(map[i-1].begin(),map[i-1].end());
cout<<map[i-1]<<endl;
for(j=i-2;j>=0;--j)
{
cout<<map[j];
if(j%2)
{
cout<<".";
}
else
{
cout<<"$";
}
reverse(map[j].begin(),map[j].end());
cout<<map[j]<<endl;
}
return 0;
}
感觉就是要细心一点,慢慢的找规律就行了,我写的还是比较麻烦,貌似有一种更加简便的写法,但是思路都是一样的,由于版权原因就不贴出来了。