【菜鸟求助】一个找数笔试题
从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这么多个完全平方数去找至少有两个相同的数,符合条件的的及时要求的数了