#include <iostream> using namespace std; int Search(double Hangover[],double temp) { int i=0,j=277; if(temp<Hangover[0]) return 0; if(temp>Hangover[277]) return 277; while(i+1 != j) { if(temp<Hangover[(i+j)/2]) j = (i+j)/2; else i = (i+j)/2; } return j; } int main() { double fOverhang[278]; double sum=0; int i=0; int number; char Overhang[10]; while(i<278) { fOverhang[i]=sum; sum += 1.0/(i+2); i++; } while(scanf("%s",&Overhang)) { Overhang[4]='/0'; float temp = atof(Overhang); if(temp<0.0001) break; number = Search(fOverhang,temp); printf("%d card(s)/n",number); } return 0; } 以上是自己实现的算法,整个思路很简单,就是遇到了时间超时问题。总算解决了。。。。