POJ 1003
POJ 1003比较简单,条件里给出了c的范围不超过5.20,方法类似于非递归求Fibonacci,我在代码中计算新的数前先判断能否在已经得到的结果中找到答案。
不过我看别人的代码,貌似不用数组保存结果,每次都直接计算也不会超时,好吧,我想多了。。。
POJ 1003 160K 0MS C++
#include <stdio.h> #include <stdlib.h> #define MAX 300 //c at least 0.01 and at most 5.20 int main() { float *sum = (float *)malloc(MAX * sizeof(float)); int *res = (int *)malloc(MAX * sizeof(int)); int maxN = 1; sum[1] = 0.5; float c; int i, k = 1; do { scanf("%f", &c); if(c <= 0) break; bool extendFlag = false; while(sum[maxN] < c){ maxN ++; sum[maxN] = sum[maxN - 1] + 1.0/(maxN + 1); extendFlag = true; } if(extendFlag) res[k] = maxN; else{ for(i=1;i<=maxN;i++) if(sum[i]>=c) break; res[k] = i; } k ++; } while(c > 0); for(i=1;i<k;i++) printf("%d card(s)\n", res[i]); free(sum); free(res); return 0; }