UVa 1594 (Floyd判圈) Ducci Sequence
大白书上P42那个计算器的题目就用到了这个办法,Floyd判圈法。
当然,用STL里的map也是可以的。
1 #include <cstdio> 2 #include <cmath> 3 4 const int maxn = 20; 5 int n; 6 int a[maxn], b[maxn], c[maxn]; 7 8 void next(int a[]) 9 { 10 for(int i = 0; i < n - 1; i++) a[i] = std::abs(a[i] - a[i + 1]); 11 a[n - 1] = a[0]; 12 } 13 14 bool equal(int a[], int b[]) 15 { 16 for(int i = 0; i < n; i++) if(a[i] != b[i]) return false; 17 return true; 18 } 19 20 int main() 21 { 22 //freopen("in.txt", "r", stdin); 23 24 int T; scanf("%d", &T); 25 while(T--) 26 { 27 scanf("%d", &n); 28 for(int i = 0; i < n; i++) { scanf("%d", &a[i]); b[i] = a[i]; } 29 a[n] = b[n] = a[0]; 30 n++; 31 32 bool loop = true; 33 for(int i = 0 ; i < 1010; i++) 34 { 35 next(a); next(b); next(b); 36 if(equal(a, c)) { loop = false; break; } 37 if(equal(b, c)) { loop = false; break; } 38 if(equal(a, b)) { loop = true; break; } 39 } 40 printf("%s\n", loop ? "LOOP" : "ZERO"); 41 } 42 43 return 0; 44 }