题意:打印出旋转字符串
思路:有几个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;}