简单的题目,我的解法采用预处理,然后使用折半查找返回答案。
#include<stdio.h> double answer[300]; int len=0; double num; int binarySearch() { int l=1,r=len,half; while(l<r) { half=(l+r)/2; if(answer[half]<num) l=half+1; else r=half; } return l; } int main() { //freopen("HangOver.txt","r",stdin); answer[len]=0; while(++len) { answer[len]=1.0/(len+1)+answer[len-1]; if(answer[len]>=5.20) break; } while(scanf("%lf",&num)&&num>0) { printf("%d card(s)\n",binarySearch()); } }