问题 B: 22-循环-2-蠢蠢机器人III
题目描述
#include<stdio.h>
#include<string.h>
int main()
{
int m=0;
while (scanf("%d",&m)!=EOF)
{
getchar();//scanf与gets之间吃掉回车
double x=0,y=0;
int flag1=0;
for (int i = 0; i < m; i++)
{
//getchar();
char str[10000]={0};
gets(str);
if (strcmp(str,"TURN")==0)//
{
flag1++;//puts(str);
//printf("%d\n",flag1);
}
else
{
double n=0;
sscanf(str,"%*[A-Z]%*[ ]%lf",&n);
//printf("%lf\n",n);
//printf("%d\n",flag1);
if (flag1%4==0)
{
y+=n;
}
else if (flag1%4==1)
{
x+=n;
}
else if (flag1%4==2)
{
y-=n;
}
else if (flag1%4==3)
{
x-=n;
}
//flag1=0;
}
}
printf("%.3f %.3f\n",x,y);
}
return 0;
}
小南升级了蠢蠢机器人,现在机器人站在笛卡尔坐标系的原点,面向y轴正方向,给定若干指令,求机器人最终坐标位置,保留到小数点后3位。
指令格式为:
(1)TURN:表示右转90度。
(2)GO n:表示向前(面向的方向)直走n距离,n为一个正实数。
输入
多样例。每个测试文件包含多组测试数据,每组测试数据的第一行m,表示有m个操作指令(1≤m≤100)。
接下来m行,每行一个指令。
输出
对于每组测试数据,输出一组实数表示机器人的最终位置(x坐标和y坐标),以空格隔开,保留3位小数。每个结果占一行。每处理完一组数据,机器人应复位到数轴原点。
样例输入 Copy
3 TURN GO 1 TURN
样例输出 Copy
1.000 0.000
提示
为了保证计算精度,实数建议定义为double型。
1、sscanf的妙用:
sscanf(str,"%*[A-Z]%*[ ]%lf",&n);
sscanf函数用法详解_坚持就有希望的博客-CSDN博客_sscanf_s函数的用法