杭电2074

杭电2074
你妈这破题说实话真够恶心的了!!!
此题的思路大致如下:
先判断在最开始输入的两个字符的关系,即谁在中心,谁在边沿,
然后运用两个循环语句判断输出的字符,,并将其保存在2维数组中,因为,通过观察不难发现,
此图是上线对称的,那么你先解决,上盘部分,然后下半部分,输出保存的2维数组,就ok了!!!
具体分析还请看代码!!!
此题要AC注意以下几点!!!
1)每个测试实例建有一个空格!!最后一个例子没有空格!!
2)当n=1时,只能输出中间图案,且没有他的前后没有空格,并且在最后输出换行!!
例如当你输入 1 A B的时候,
你应输出     A(A的前后都没有空格)
               (换行)
3)最你好运吧!!!哎!!

#include<iostream>
using namespace std;
int main()
{
 int n;char ch1,ch2,ch;
 int i,j,k=0,m;
 char a[100][100];//定义2维数组用于储存下半部分!!
 while(cin>>n>>ch1>>ch2)
 {
  if(k)
   cout<<endl;//判断是否输出空格!!
     
  
  memset(a,'\0',sizeof(a));//清零
  if((n-1)/2%2==1)
   {
    ch=ch1;
    ch1=ch2;
    ch2=ch;
   }//判断那个是最外成图案
  
  if(n==1)
  {cout<<ch1;
      cout<<endl;
      continue;
  }//n=1时点的特殊情况!!
  
  for(i=0;i<=n/2;i++)
  {  for(j=0;j<n;j++)
   {
    if((i==0&&j==0)||(i==0&&j==n-1)||(i==n-1&&j==0)||(i==n-1&&j==n-1))
    {
     printf(" ");
     a[i][j]=' ';//4个角输出空格!
    
    
     continue;
    }
    if(j<i&&j%2==0)
    {
     cout<<ch1;
     a[i][j]=ch1;
     continue;
    }
    if(j<i&&j%2==1)
    {
     cout<<ch2;
     a[i][j]=ch2;
     continue;
    }
    if(j>=n-i&&j%2==1)
    {
     cout<<ch2;
     a[i][j]=ch2;
     continue;
    }
    if(j>=n-i&&j%2==0)
    {  cout<<ch1;
    a[i][j]=ch1;
    continue;
   }
       if(i%2==0)
    {  cout<<ch1;
        a[i][j]=ch1;
    }
    if(i%2==1)
    { cout<<ch2;
             a[i][j]=ch2;
    }//此部分是输出图案的上半部分,请读者自己分析一下!!!
 }
  cout<<endl;
  }

 for(i=n/2-1;i>=0;i--)
 { for(j=0;j<n;j++)
   cout<<a[i][j];
 cout<<endl;}//利用2维数组输出下半部分!!
k++;
 
 }

 return 0;
}

原文地址:https://www.cnblogs.com/xiohao/p/2793348.html