hdu2137 circumgyrate the string 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2137
字符串处理 模拟
题目大意:旋转字符串。给定字符串,旋转n次,输出结果。每次逆时针旋转45度。
题目分析:45是360的1/8,所以周期为8。注意正负。
#include<stdio.h>
#include<string.h>
int main()//我的思路是把处理过程分成两步:1、转制2、打印
{
int n,i,j,k;//转制是为了合并可合并情况,以简化第二步
char a[84];
while(scanf("%s",a)!=EOF)
{
k=strlen(a);
scanf("%d",&n);
switch(n%8)//这些情况需要转制
{
case -7:
case -6:
case -5:
case -4:
case 1:
case 2:
case 3:
case 4:strrev(a);
}
switch(n%8)
{
case 0: //1、一横行
case 4:
case -4:
printf("%s\n",a);break;
case 1: //2、右上-左下
case -7:
case 5:
case -3:
for(i=k-1;i>=0;i--)
{
for(j=0;j<i;j++)
{
printf(" ");
}
printf("%c\n",a[k-i-1]);
//if(i)printf("\n");
}break;
case 2: //3、一竖列
case -6:
case 6:
case -2:
for(i=0;i<k;i++)
{
//if(i)printf("\n");
for(j=0;j<k/2;j++)
{
printf(" ");
}
printf("%c\n",a[i]);
}break;
case 3: //4、右上-左下
case -5:
case 7:
case -1:
for(i=0;i<k;i++)
{
//if(i)printf("\n");
for(j=0;j<i;j++)
{
printf(" ");
}
printf("%c\n",a[i]);
}break;
}
//printf("%s\n",a);
}
return 0;
}
PS:被这个水题小坑了一下。一开始没注意正负。Input里有一句In each case there is string and a integer N.这个N是“a integer”,并没有说nonegetive,所以它可能是负的,也就是顺时针转。