1. 一下午就做了这么一道题,蛋疼的模拟题。刚开始没有考虑当超过100的时候怎么处理,一直WA,上网看解题报告才知道。。。
2. memset()函数的用法。只能初始化为0或者-1。当初始值为其他数时,是在每一位上是这个数(这句话没明白),记住只能把数组初始化为0或者-1就行了;
3. 此题属于模拟题,不得不说,模拟题的if语句就是多啊;
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int step[100], map[101], turn[7], cur[7];
int step_num, i, peo, sx, ex, again, ans, j;
memset(step, 0, sizeof(step));
i = 0;
while (cin >> step[i])
{
if (step[i] == 0)
break;
i++;
}
step_num = i - 1;
while(cin >> peo)
{
if (peo == 0)
break;
memset(map, 0, sizeof(map));
while (cin >> sx >> ex)
{
if (sx == 0 && ex == 0)
break;
else map[sx] = ex;
}
while (cin >> again)
{
if (again == 0)
break;
else if (again > 0)
map[again] = -1;//重新扔一次
else map[-again] = -2;//下次不扔
}
memset(turn, 0, sizeof(turn));//为0表示不turn
memset(cur, 0, sizeof(cur));
for (i = 0, ans = 0; i <= step_num; i++)
{
if (!turn[ans])
{
j = cur[ans] + step[i];
if (j == 100)
break;
if (j > 100)
{
ans = (ans + 1) % peo;
continue;
}
if (map[j] == 0)
{
cur[ans] = j;
ans = (ans + 1) % peo;
continue;
}
if (map[j] > 0)
{
cur[ans] = map[j];
ans = (ans + 1) % peo;
continue;
}
if (map[j] == -1)
{
cur[ans] = j;
continue;
}
if (map[j] == -2)
{
cur[ans] = j;
turn[ans] = 1;
// continue;
}
}
else
turn[ans] = 0;
ans = (ans + 1) % peo;
}
cout << ans + 1 << endl;
}
return 0;
}