题意:给你一个字符串和一个整数N,将字符串按逆时针旋转N次,每次旋转45度角,输出旋转后的字符串形式。
解题思路:模拟。注意整数N可能为负数,当N=N%8<0的时候,要将余数转换成正数,即N+=8;还有每次旋转都是以字符串的中心处为轴心旋转,当N%8 等于2或6时,每个字母前面都有一半字符串长度的空格。
Code:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
//freopen("input.txt","r",stdin);
int N;
char str[90];
while(~scanf("%s %d",str,&N))
{
int len = strlen(str);
int flag = N%8;
if(flag < 0) flag +=8;
if(flag == 0) puts(str);
else if(flag == 1)
{
for(int i = len-1; i >= 0; i--)
{
for(int j = 0; j < i; j++) printf(" ");
printf("%c\n",str[i]);
}
}
else if(flag == 2)
{
for(int i = len-1; i>=0; i--)
{
for(int j = 0; j<len/2; j++) printf(" ");
printf("%c\n",str[i]);
}
}
else if(flag == 3)
{
for(int i = len-1; i>=0; i--)
{
for(int j = 1; j<(len - i); j++) printf(" ");
printf("%c\n",str[i]);
}
}
else if(flag == 4)
{
for(int i = len-1; i >= 0; i--)
printf("%c",str[i]);
printf("\n");
}
else if(flag == 5)
{
for(int i = 0; i<len; i++)
{
for(int j = 1; j<(len-i); j++) printf(" ");
printf("%c\n",str[i]);
}
}
else if(flag == 6)
{
for(int i = 0; i<len; i++)
{
for(int j = 0; j<len/2; j++) printf(" ");
printf("%c\n",str[i]);
}
}
else if(flag == 7)
{
for(int i = 0; i<len; i++)
{
for(int j = 0; j < i; j++) printf(" ");
printf("%c\n",str[i]);
}
}
}
return 0;
}