【c++模拟题】玩具谜题

返回试炼场从简单的模拟开始刷了。没有看题解自己刷出来的第一道模拟。。。

看着20多个测试点一个个都绿了超级开心的(*^▽^*)。

本人蒟蒻,不足之处望指正。希望能对大家有所帮助!

原题传送门

思路是这样的:

(附上题目的附图)

【c++模拟题】玩具谜题_第1张图片

通过对题目的观察:

“(摘自原题)

singer朝内, 左数第3个是archer。

(朝内的人,他的“左数”,相对于坐在电脑前的我们而言,是“右数”)

archer朝外,右数第1个是thinker。

(朝外的人,他的“右数”,相对于坐在电脑前的我们而言,是“右数”)

thinker朝外, 左数第2个是writer。

(朝外的人,他的“右数”,相对于坐在电脑前的我们而言,是“右数”)

所以眼镜藏在writerwriter这里!

做过那种“xx围成一个圈。。。”的题目的同好都知道,我们不能用数组围出一个环,只能把这个环“拉直”成一条线。这道题也是一样的。

由于第一个人也是最后一个人,就在数组最后把第一个人“复制”一次,模拟环状结构。

【c++模拟题】玩具谜题_第2张图片(第一行那个mogician忽略就好。。。)

通过刚刚的蓝字解读,可以得出普遍性的规律:

朝里:正常操作(位置左减右加)

朝外:反向操作(位置左加右减)

题目里只有7人,万一出现了向左(右)移100人的位置就不好了╰(*°▽°*)╯?!

所以除了一个表示当前位置的“j”,我设了一个“j2”来进行操作预判,等麻烦事都被j2处理好了,就把新的位置赋给j。

每个数据都包含了“名字”和“朝向”两个量,于是用了结构体操作。

上代码(没删调试,将就看吧)

#include
#include
using namespace std;
typedef struct
{
	string name;
	int d;//方向
} man;
man mann[100001];
int main()
{
	int n,zl;
	int i;
	scanf("%d%d",&n,&zl);
	for(i=1; i<=n; i++)
	{
		cin>>mann[i].d>>mann[i].name;
	}
	mann[n+1].d=mann[1].d;
	mann[n+1].name=mann[1].name;
	//printf("i=%d\n",i);
	//cout<n)
				{
					j2-=n;
				}
				j=j2;
			}	
			//cout<

你可能感兴趣的:(c++编程)