错误原因分析

这道题很简单,根据题目模拟就能对,根本不用怕时间和内存超限。
但是,这道题是四向移动,一开始被我写成了两向。
虽然后来发现了,但是!我只把left改了,没改right!
居然还能对两个也让我挺惊讶,但是只要改一个数字就是100了啊!

代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<iomanip>
using namespace std;

int main()
{
	//freopen("way.in", "r", stdin);
	//freopen("way.out", "w", stdout);
	
	bool f = 0;
	long long n = 0, fx = 0, b = 0, x = 0, y = 0;
	char a[105];
	
	cin >> n;
	
	for(long long i = 0; i < n; i++)
	{
		cin >> a;
		if(a[0] == 'l')
		{
			fx = (fx - 1 + 4) % 4;
		}
		else if(a[0] == 'r')
		{
			fx = (fx + 1) % 4;  //错误就出在这里,我原来写成了%2
		}
		else
		{
			b = 0;
			for(long long j = 0, z = strlen(a) - 1; a[j] != '\0'; j++, z--)
			{
				b = b + (a[j] - '0') * pow(10, z);
			}
			if(fx == 0)//四向输出
			{
				f = 1;
				y = y + b;
				printf("(%lld,%lld)\n", x, y);
			}
			else if(fx == 1)
			{
				f = 1;
				x = x + b;
				printf("(%lld,%lld)\n", x, y);
			}
			else if(fx == 2)
			{
				f = 1;
				y = y - b;
				printf("(%lld,%lld)\n", x, y);
			}
			else
			{
				f = 1;
				x = x - b;
				printf("(%lld,%lld)\n", x, y);
			}
		}
	}
	
	if(!f)
	{
		cout << "(0,0)";
	}
	
	cout << '\n';
	
	//fclose(stdin);
	//fclose(stdout);
	
	return 0;
}

教训

1.代码写完后一定要review!一定要review!一定要review
2.调试时一定要多尝试几组测试数据,很有可能就会发现错误。