读书人

【初学者】一个找数笔试题

发布时间: 2012-11-09 10:18:48 作者: rapoo

【菜鸟求助】一个找数笔试题
从0-99999中找出符合下列条件的数:是完全平方数,至少有两个数字相同。如144,676,怎么才能快速高效的找出来呢,本人菜鸟!

[解决办法]

C/C++ code
#include <stdio.h>#include <math.h>#include <string.h>int main(){    int t=sqrt((double)99999),used[10];    for(int i=1;i<=t;i++)    {        int a=i*i;        int b=a;        memset(used,0,sizeof(used));        while(b)        {            used[b%10]++;            b/=10;        }        for(int i=0;i<10;i++)            if(used[i]>1)            {                printf("%d\n",a);                break;            }    }}
[解决办法]
上面这个应该蛮快了,一下子把范围缩小到[1,sqrt(99999)] = [1, 316]了.
[解决办法]
1,事先全部算出来,放到一个表上,这样去找是最快的,这种方法一般在数据量不大且固定的时候很有用的。
2,当n*n<=99999,并且(n+1)*(n+1)>99999,可算出n = 316。也就说,可以从0~316这么多个完全平方数去找至少有两个相同的数,符合条件的的及时要求的数了

读书人网 >C语言

热点推荐