HDU 2137 circumgyrate the string

题意:打印出旋转字符串

思路:有几个trick:

(1)横着打出来的要顶格

(2)竖着打出来的要有空格在前面

(3)打印出字符之后没有空格出现了(好久没切过题了,这样的题目老早要挂在word哪里工具--选项--显示所有的该死的东西的)

(4)n为负数


代码胡乱码,真心恶心,自己的代码是要好好修一下了.一维的简单更优雅.


#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char str[85];
char ling[85][85];
int n;
int main()
{
//freopen("f.txt","r",stdin);
//freopen("f.out1.txt","w",stdout);
while(~scanf("%s%d",str,&n))
{
    memset(ling,0,sizeof(ling));
    int len=strlen(str);
    int x=len/2;
    int y=len/2;
    ling[x][y]=str[len/2];
    if(n%8==0)
       {
         printf("%s\n",str);
         continue;       
       }
    else if(n%8==4||n%8==-4)
       {
          for(int i=len-1;i>=0;i--)
            printf("%c",str[i]);
          printf("\n");
          continue;            
       }
    else if(n%8==1||n%8==-7)
    {
       for(int i=1;i<=len/2;i++)
           ling[x-i][y+i]=str[len/2+i];
       for(int i=1;i<=len/2;i++)
           ling[x+i][y-i]=str[len/2-i];  
    }
       
     else if(n%8==2||n%8==-6)
     {
       for(int i=1;i<=len/2;i++)
           ling[x-i][y]=str[len/2+i];
       for(int i=1;i<=len/2;i++)
           ling[x+i][y]=str[len/2-i];   
     }
       
     else if(n%8==3||n%8==-5)
     {
        
       for(int i=1;i<=len/2;i++)
           ling[x-i][y-i]=str[len/2+i];
       for(int i=1;i<=len/2;i++)
           ling[x+i][y+i]=str[len/2-i];  
     }
     else if(n%8==5||n%8==-3)
     {
        
       
       for(int i=1;i<=len/2;i++)
           ling[x+i][y-i]=str[len/2+i];
       for(int i=1;i<=len/2;i++)
           ling[x-i][y+i]=str[len/2-i];
      }
      else if(n%8==6||n%8==-2)
      {
         
       for(int i=1;i<=len/2;i++)
           ling[x+i][y]=str[len/2+i];
       for(int i=1;i<=len/2;i++)
           ling[x-i][y]=str[len/2-i];  
      }
       
       else if(n%8==7||n%8==-1)
       {
         
       for(int i=1;i<=len/2;i++)
           ling[x+i][y+i]=str[len/2+i];
       for(int i=1;i<=len/2;i++)
           ling[x-i][y-i]=str[len/2-i];   
       }
       
             
                       
     
    for(int i=0;i<len;i++)
    {
      for(int j=0;j<len;j++)
      {
         if(ling[i][j])
            {
               printf("%c",ling[i][j]);
               break;//这个就是为了第三个trick 
            }
         else
            printf(" ");     
      }
      printf("\n");
    }
         
                             
}
//system("Pause");
return 0;}



你可能感兴趣的:(HDU 2137 circumgyrate the string)