这个题目其实感觉是一道数论的题目,因为有时间限制,如果强行搜索必然导致TLE
本题在解答的时候主要困难在于边界条件的确定
#include<cstdio>
#include<cmath>
using namespace std;
int n,m,num,start,end;
int cas = 0;
int a[20];
void find(int a1,int a2)
{
int i;
for( i=0;i<num;i++)
{
if(a[i]>a1)
{
start =i-1;
break;
}
}
for(i=0;i<num;i++)
{
if(a[i]>=a2)
{
end = i-1;
break;
}
if(i==num-1)//考虑到如果给出的数值已经超过符合条件的数的最大值时
{
end = i;
break;
}
}
}
int main()
{
num=0;
for(int i= 1,triangle = 0;triangle <=1000000000;triangle+=i,i++)
{
double sqrtdou = sqrt(triangle+1);
int sidelen = (int)sqrtdou;
if(sidelen*sidelen == triangle+1)
a[num++]=triangle+1;
}
// freopen("1.txt","r",stdin);
while(scanf("%d%d",&n,&m)==2)
{
cas++;
if(n==0&&m==0) break;
find(n,m);
printf("Case %d: %d\n",cas,end-start);
}
return 0;
}