问题 E: 聚聚的小游戏 (个人在做完这道题后并没有想这么多,只是觉得是一道常规题,但试后发现这道题确实还是有值得探讨的地方的,注意看我下面的i的值)
(对于一些同学搞不明白i的初始值的问题,我相信此篇文章也会对你有一些启发)
问题描述:
聚聚写课程设计突发奇想做了一个益智(简单)小游戏。游戏中间有一部分是使用键盘W、A、S、D(分别代表上、左、下、右)来控制角色移动,现在游戏角色在原点,聚聚给你n个大写字母‘W’’A’’S’’D’,如果角色经过这n个操作后依然在原点请输出”YES”,否则输出”NO”(不带引号)。
输入:
第一行,一个正整数n,且n<=100
第二行,n个字符,每个字符是大写字母‘W’或’A’或’S’或’D’
输出:
一行,如果角色还在原点输出”YES”(不带引号),否则输出”NO”(不带引号)
样例输入:
8
WASDWASD
样例输出:
YES
#include <stdio.h>
int main()
{
int n;
scanf ("%d",&n);
char m;
int x=0,y=0;
int i=0;//在这里我i的值为0,目的是使n后面的换行符不要影响我对步数的判断,赛后发现这也是一种吸收掉换行符的方法,并且个人认为比getchar要来的方便,当然吸收换行符也可以使用%*c或者getchar
//在编译器里使用调试功能会发现第一个mASCII码值为10也就是\n
while(i<=n)
{
scanf ("%c",&m);
if(m=='W')
{
x=x+1;
}
else if(m=='S')
{
x=x-1;
}
else if(m=='A')
{
y=y+1;
}
else if(m=='D')
{
y=y-1;
}
i++;
}
if(x==0&&y==0)
{
printf ("YES");
}
else
{
printf ("NO");
}
return 0;
}
在这里我i的值为0,目的是使n后面的换行符不要影响我对步数的判断,赛后发现这也是一种吸收掉换行符的方法,并且个人认为比getchar要来的方便,当然吸收换行符也可以使用%*c或者getchar