循环与选择
题目描述
公元13世纪上半叶,蒙古军队一路西征杀向欧洲。在进军途中,蒙古骑兵以旗为单位沿一条道路相继开进。为了给后面的队伍指路,每当遇到一个道路分叉处时,就在路旁堆石头堆作路标,堆一堆石头表示直行,堆两堆石头表示右转,堆三堆石头表示左转。试用C语言编写一个程序,计算出通过的路口数目。假设每个相邻路口间路段的长度基本相等且开始的方向向西(以此判断第一个路口,即出发时向哪个方向走),用输出eswn四个字母或其组合来确定最终的地点相对于出发地(即第一个路口)的方位。
输入格式
只有一行(以’\n’结束),分别用1、2和3表示路口遇到的石碓的数量,最多有20个路口。
输出格式
只有一行,由一个数字和一个字母或两个字母组合分别构成路口的数目和最终地点与出发地的方位。如果需要输出两个字母,则输出字母按照字典序输出(不用考虑回到原始出发点的情况)。
输入样例
31
输出样例
2,s
#include<stdio.h>
#include<string.h>
int main()
{
char a[20],m,n;
char d='1';
char b[4];
int i,k=0;
int x=0;
int y=0;
for(i=0;i<20;i++)
{
scanf("%c",&a[i]);
if(a[i]=='\n')break;
else k++;
}
for(i=0;i<k;i++)
{
if(d=='1')
{
if(a[i]=='1')
{
x-=1;
continue;
}
if(a[i]=='2')
{
y+=1;
d='2';
continue;
}
if(a[i]=='3')
{
y-=1;
d='3';
continue;
}
}
if(d=='2')
{
if(a[i]=='1')
{
y+=1;
continue;
}
if(a[i]=='2')
{
x+=1;
d='4';
continue;
}
if(a[i]=='3')
{
x-=1;
d='1';
continue;
}
}
if(d=='3')
{
if(a[i]=='1')
{
y-=1;
continue;
}
if(a[i]=='2')
{
x=x-1;
d='1';
continue;
}
if(a[i]=='3')
{
x+=1;
d='4';
continue;
}
}
if(d=='4')
{
if(a[i]=='1')
{
y+=1;
continue;
}
if(a[i]=='2')
{
y-=1;
d='3';
continue;
}
if(a[i]=='3')
{
y+=1;
d='2';
continue;
}
}
}
if(x==0)
{
if(y>0)
printf("%d,n\n",k);
else if(y<0)
printf("%d,s\n",k);
}
if(y==0)
{
if(x>0)
printf("%d,e\n",k);
else if(x<0)
printf("%d,w\n",k);
}
if(x>0)
{
if(y>0)
printf("%d,en\n",k);
else if(y<0)
printf("%d,es\n",k);
}
if(x<0)
{
if(y>0)
printf("%d,nw\n",k);
else if(y<0)
printf("%d,sw\n",k);
}
return 0;
}
谁来帮忙看一下哪里错了,谢谢;