#include<iostream>
using namespace std;
int p[10]={0,1,2,4,5,5,5,7,8,9};
int firstGreatOrEquual(int n){//查找第一个大于等于n的数
int x=0,y=9;
while(x<=y){
int m=x+(y-x>>1);//在x的基础上不断向后延伸
if(p[m]>=n)
y=m-1;
else
x=m+1;
}
return x;//p[x-1]即为最后一个小于n的数
}
int firstGreat(int n){//查找第一个大于n的数
int x=0,y=9;
while(x<=y){
int m=x+(y-x>>1);
if(p[m]>n)
y=m-1;
else
x=m+1;
}
return x;//p[x-1]即为第最后一个小于等于n的数
}
int main()
{
printf("%d
",p[firstGreatOrEquual(5)]);//5
printf("%d
",p[firstGreat(5)]);//7
printf("%d
", firstGreat(5)-firstGreatOrEquual(5));//5的个数
return 0;
}