一、题目概述
计算机程序世界中有一位孤独的电子狗,这个电子狗每次只能执行一种操作指令:朝着现在的方向前进X米,然后左转。 电子狗认为,它不断的执行这样的指令,最终有一条指令,能使它回到曾经走过的地方。 然而,实际上,当它已经执行完给定它的n条指令时,并不一定会回到它曾经走过的地方。
并且,电子汪很想知道结果。如果给了它n条指令,在第几条指令时,它能第一次回到自己已经走过的地方。如果指令执行完,都没有回到它曾经走过的地方,电子汪将会十分伤心,这个时候请输出“regret”。
输入格式:
第一行为T,表示输入数据组数。 每组数据的第一行包含一个数n,表示指令长度。接着一行包含n个数字ai,表示第i个指令中,前行的距离。
1<=T<=100
1<=n<=1 000 000
1<=ai<=1 000 000 000
输出格式:
对每组数据输出第一次回到已经走过的位置时为第几条指令。 如果电子汪最终没有回到过自己走过的地方,请输出“regret”。
二、思路分析
由于电子狗每前进Xm,就要进行左转,所以有以下的三种情况电子狗能回到已经走过的位置:
三、代码实现
对于上述分析,有以下代码来进行实现:
#include<stdio.h> int a[1000000] = { 0 }; int main() { int count = 0; scanf("%d", &count); while (count--) { int n = 0; int first = 0; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } if (n <= 3) { printf("regret\n"); continue; } for (int i = 4; i <= n; i++) { if (i >= 4) { if(a[i - 3] >= a[i - 1] && a[i - 2] <= a[i]) { first = i; break; } } if (i >= 5 ) { if(a[i - 3] == a[i - 1] && a[i - 2] <= a[i] + a[i - 4]) { first = i; break; } } if (i >= 6 ) { if(a[i - 3] <= a[i - 1] + a[i - 5] && a[i - 2] <= a[i] + a[i - 4]&&a[i-1]<=a[i-3]&&a[i-4]<=a[i-2]) { first = i; break; } } } if (first > 0) { printf("%d\n", first); } else { printf("regret\n"); } } return 0; }