HDOJ1021 Fibonacci Again
//2014-3-11 09:16:50 #include <stdio.h> #define MAX 1000000 int a[MAX] = {1, 2}; int main(){ int n; for(n = 2; n != MAX; ++n) a[n] = (a[n - 1] + a[n - 2]) % 3; while(scanf("%d", &n) == 1) printf(a[n] ? "no\n" : "yes\n"); return 0; }
优化好的代码:
//2014-3-11 09:29:47 #include <stdio.h> int main(){ int n; while(scanf("%d", &n) == 1) printf(n % 4 == 2 ? "yes\n" : "no\n"); return 0; }
两者复杂度对比:
15MS 4144K 253B
0MS 228K 151B
第二种用的是循环判断,因为余数只有3种,即0,1,2,共8种情况,所以循环最大为2^3=8,,列出前八种情况可知,当n=2或n=6时yes,即n%4==2时yes。