- 注册时间
- 2008-12-31
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 6090
- 在线时间
- 小时
|
发表于 2009-6-19 21:27:06
|
显示全部楼层
我写了一个弱弱的程序,得到了一些相关的结果,不过跟题目有点不一样,得到了下面的链:
1->LENS:1
144->441->LENS:2
169->196->961->LENS:3
10404->14400->40401->44100->LENS:4
10609->16900->19600->61009->90601->96100->LENS:6
1006009->1060900->1690000->1960000->6100900->9006001->9060100->9610000->LENS:8
10278436->10837264->23078416->32478601->38204761->38427601->42367081->47623801->
72148036->LENS:9
12348196->19324816->19412836->31281649->34916281->42981136->48219136->81234169->
83192641->91623184->LENS:10
14243076->31270464->37601424->41370624->43046721->44076321->47032164->47320641->
61027344->73410624->73462041->LENS:11
100240144->100420441->102414400->104244100->121044004->121440400->144024001->144
240100->201044041->400440121->404412100->441042001->441420100->LENS:13
100460529->104652900->104960025->105206049->120956004->169052004->169520400->194
602500->200165904->251000649->264095001->400520169->405216900->529046001->529460
100->605012409->621504900->624950001->659000241->964102500->LENS:20
102576384->105637284->158306724->176305284->180472356->183467025->187635204->208
571364->218034756->284057316->307265841->316057284->430728516->472801536->475283
601->560837124->570684321->576432081->734681025->783104256->825470361->853107264
->LENS:22
139854276->152843769->157326849->215384976->245893761->254817369->326597184->361
874529->375468129->382945761->385297641->412739856->523814769->529874361->537219
684->549386721->587432169->589324176->597362481->615387249->627953481->653927184
->672935481->697435281->714653289->735982641->743816529->842973156->847159236->9
23187456->LENS:30
1600000000以内最长的链,代码如下:
-
- /*
- 169 = 13^2
- 196 = 14^2
- 961 = 31^2
- 数码位置不对的平方数组合测试。
- winxos 2009-6-19
- */
- #include <iostream>
- #include <vector>
- #include <cmath>
- using namespace std;
- int isLike(int a,int b)
- {
- int t[10]={0};
- while(a)
- {
- t[a%10]+=10;
- t[b%10]+=1;
- a/=10;
- b/=10;
- }
- for (int i=0;i<10;i++)
- if (t[i]%10 != t[i]/10)
- return 0;
- return 1;
- }
- int main()
- {
- int i,maxlen=0,max=40000;
- int *table=new int[max];
- vector<int> chains; //记录链长
- for (i=1;i<max;i++)
- {
- table[i]=i*i;
- }
- for (i=1;i<max;i++)
- {
- chains.clear();
- chains.push_back(table[i]); //第一个数
- for (int j=i+1;j<max;j++)
- {
- if ((int)(log(table[j])/log(10)) > (int)(log(table[i])/log(10)))
- break; //位数不同,提前跳出循环
- if (table[j] == 0)
- continue; //已经访问过,进入下一步
- if (isLike(table[j],table[i]))
- {
- chains.push_back(table[j]);
- table[j]=0; //将访问过的数划掉
- }
- }
- if (chains.size() > maxlen)
- {
- maxlen=chains.size();
- for (int j=0;j<maxlen;j++)
- cout<<chains[j]<<"->";
- cout<<"LENS:"<<maxlen<<endl;
- }
- }
- return 0;
- }
复制代码 |
|