Mathematica code:
f := Module[{tmp},
tmp = Select[
Range, ! MemberQ, 0] &];
Select[tmp,
And @@ (Table[#[] == #[] + #[], {i, n - 2}] &[
IntegerDigits[#]]) &]];
f /@ Range // Timing
需要说明的是,这段代码本来不够精简,在PKU大宝同学的帮助下改写成这样,当然这种方法很暴力,效率较低。
偶还发现
3-6位这种数的个数也比较有趣,都是完全平方数:
{36, 16, 4, 1} 题目出错,应该是百位,不是千位 用vbs就行
For j=2 TO 9
For i=1 TO j-1
b=100*j+i*10+j-i
c=i+j
d=c+j
e=d+c
f=e+d
a=a&chr(32)&b
if c<10 then a=a&chr(32)&c*1000+b
if d<10 then a=a&chr(32)&d*10000+c*1000+b
if e<10 then a=a&chr(32)&e*100000+d*10000+c*1000+b
if f<10 then a=a&chr(32)&f*1000000+e*100000+d*10000+c*1000+b
Next
Next
MsgBox a "十一"在家十天,在家干农活挺累的,今天刚到校,家里没网.发现9楼的Java代码有误(尽管是小错)。用C又重写了,第一个还是“构造型”的,另一个是“暴搜型”的:
#include <stdio.h>
int main()
{
int count=0;
for (int i=1;i<9;i++)
{
for (int j=1;j<9;j++)
{
int a,a1=i,a2=j,t=10*a2+a1;
while (a1+a2<10)
{
a=a1+a2;
a1=a2;
a2=a;
int k=1;
for (int u=t;u;u/=10)
{
k*=10;
}
t+=k*a;
printf("%d",t);
printf(++count%10? "\t":"\n");
}
}
}
printf("\n\ncount : %d\n",count);
return 0;
}
---------------------------------------------------------------
#include <stdio.h>
#include <math.h>
#define MAXDIG 6
int main(int argc, char *argv[])
{
int count=0;
for (int dig=3;dig<=MAXDIG;dig++)
{
for (int n=(int)pow(10.0,dig-1);n<(int)pow(10.0,dig);n++)
{
int a,i=0,m;
for (int t=n;t!=0;t/=10)
{
m=t%10;
if (m==0) break; //continue;
a=m;
}
bool flag=true;
for ( i=0;i<=dig-3;i++)
{
if (a!=a+a)
{
flag=false;
break;
}
}
if (flag)
{
printf("%d",n);
printf(++count%10?"\t":"\n");
}
}
}
printf("\nCount : %d\n",count);
return 0;
}
57个,穷举法 穷举法
页:
1
[2]