题解 | #坐标移动#
坐标移动
http://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
绑架算力了属于是
- 先将数据分组,放在二维的vector中。
- 分别处理每一行,按特征剔除不符合的数据。
- 用到了数据覆盖思想。此法也可用于提取不重复数据(去重)。
- 总之是笨比方法暴力破解。
- 啊,我要欣赏一下其他大佬的方法。
#include<string.h>
//AS赋负值,DW赋正值。
//检测ASDW后的数字,与上一个结果做运算,第一个从零开始
//以分号做标志
//不能出现除数字和ASDW以外的字符
char input[10000],n[1000],m[1000],asb[1000][1000]={0};
int len,i=0,j=0,k=0,flag=0,p=0,x = 0,y = 0,dir,dist=0,distance[1000];
char A,S,D,W;
int rank[1000]={-1};
int dis_fen,dis_fen_2,dis_fen_3,dis_fen_4;
char char_list[10]={'0','1','2','3','4','5','6','7','8','9'};
int digital_list[10]={0,1,2,3,4,5,6,7,8,9},d[100];
int main()
{
while(scanf("%s\n",input) != EOF)
{
len = strlen(input);//获取字符串长度
for(i = 0; i <len ;i++)//获取分号位置
{
if(input[i] ==';')
{
rank[j+1]=i;
j++;
}
}
int point=j;
//二维数组,f分号分隔放在不同行
//3<坐标相减<4的放入 套:第一个是字母的放入
//if坐标=3 看第二位是否是数字
//else if坐标=4 第二第三位是否是数字
//
for(i=0;i<point;i++)//分组
{
for(k = flag,j=0;((input[k] != ';')&&(input[k] != '\n'));k++)
{
asb[i][j]=input[k];
j++;
}
j=0;
k++;
flag=k;
}
for(i= 0;i<point;i++)//计算每行的长度
{
distance[i] = rank[i+1]-rank[i];
}
for(i=0;i<point;i++)//长度不符合的剔除
{
if((distance[i]<3)||(distance[i]>4))
{
for(j=i;j<point;j++)
{
for(k=0;k<distance[j+1];k++)
{
asb[j][k]=asb[j+1][k];
}
distance[j]=distance[j+1];
}
i--;
point--;
}
}
for(i=0;i<point;i++)//首位不符合的剔除
{
if((asb[i][0] !='A')&&(asb[i][0] !='S')&&(asb[i][0] !='D')&&(asb[i][0] !='W'))
{
for(j=i;j<point;j++)
{
for(k=0;k<distance[j+1];k++)
{
asb[j][k]=asb[j+1][k];
}
distance[j]=distance[j+1];
}
i--;
point--;
}
}
for(i=0;i<point;i++)
{
if((asb[i][1]<'0')||(asb[i][1]>'9'))//剔除第二位不是数字的
{
for(j=i;j<point;j++)
{
for(k=0;k<distance[j+1];k++)
{
asb[j][k]=asb[j+1][k];
}
distance[j]=distance[j+1];
}
i--;
point--;
}
else
{
if(distance[i]==4)
{
if((asb[i][2]<'0')||(asb[i][2]>'9'))//剔除第三位不是数字的
{
for(j=i;j<point;j++)
{
for(k=0;k<distance[j+1];k++)
{
asb[j][k]=asb[j+1][k];
}
distance[j]=distance[j+1];
}
i--;
point--;
}
}
}
}
//仿照单片机进行表查找
for(i=0;i<point;i++)
{
if(distance[i]==3)//个位数距离
{
for(j=0;j<10;j++)
{
if(asb[i][1]==char_list[j])
{
d[i]=digital_list[j];
}
}
}
else//十位数距离
{
for(j=0;j<10;j++)
{
if(asb[i][1]==char_list[j])
{
d[i]=digital_list[j]*10;
}
}
for(j=0;j<10;j++)
{
if(asb[i][2]==char_list[j])
{
d[i]=d[i]+digital_list[j];
}
}
}
}
for(i=0;i<point;i++)
{
switch(asb[i][0])
{
case 'A':
{
x =x-d[i];
break;
}
case 'S':
{
y =y-d[i];
break;
}
case 'D':
{
x = x+d[i];
break;
}
case 'W':
{
y = y+d[i];
break;
}
}
}
printf("%d,%d",x,y);
}
}