找回密码
 欢迎注册
查看: 29378|回复: 6

[讨论] 相同数字组成的平方数

[复制链接]
发表于 2009-6-16 16:37:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
考虑1,6,9组成的三位数 169 = 13^2 196 = 14^2 961 = 31^2 现在有问题 1、假设有不重复的n个数字组成的集合A,由A中的不重复数字组成的n位平方数,对应A集合 1)对A的每种情况,对应的平方数都有多少个,比如A = {1, 6, 9},对应有3个平方数 2)如何挑选A使得组成的平方数最多 2、假设有n个重复的数字组成的集合A,由A中的可重复数字组成的n位平方数,对应A集合,且要求所有平方数具有相同的数字组成 你能求出一个得到最多平方数的集合A,且列出其对应的平方数么
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-6-17 15:00:29 | 显示全部楼层
难道我这个题目有问题? 咋没人说话呢?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-6-17 18:03:46 | 显示全部楼层
穷举吧。不重复的n个数字组成的平方数一共才611个
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-6-18 10:24:22 | 显示全部楼层
呵呵,是的,不重复的有限的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-6-19 10:59:21 | 显示全部楼层
有时间我看看我能不能求出来。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 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以内最长的链,代码如下:
  1. /*
  2. 169 = 13^2
  3. 196 = 14^2
  4. 961 = 31^2
  5. 数码位置不对的平方数组合测试。
  6. winxos 2009-6-19
  7. */
  8. #include <iostream>
  9. #include <vector>
  10. #include <cmath>
  11. using namespace std;
  12. int isLike(int a,int b)
  13. {
  14. int t[10]={0};
  15. while(a)
  16. {
  17. t[a%10]+=10;
  18. t[b%10]+=1;
  19. a/=10;
  20. b/=10;
  21. }
  22. for (int i=0;i<10;i++)
  23. if (t[i]%10 != t[i]/10)
  24. return 0;
  25. return 1;
  26. }
  27. int main()
  28. {
  29. int i,maxlen=0,max=40000;
  30. int *table=new int[max];
  31. vector<int> chains; //记录链长
  32. for (i=1;i<max;i++)
  33. {
  34. table[i]=i*i;
  35. }
  36. for (i=1;i<max;i++)
  37. {
  38. chains.clear();
  39. chains.push_back(table[i]); //第一个数
  40. for (int j=i+1;j<max;j++)
  41. {
  42. if ((int)(log(table[j])/log(10)) > (int)(log(table[i])/log(10)))
  43. break; //位数不同,提前跳出循环
  44. if (table[j] == 0)
  45. continue; //已经访问过,进入下一步
  46. if (isLike(table[j],table[i]))
  47. {
  48. chains.push_back(table[j]);
  49. table[j]=0; //将访问过的数划掉
  50. }
  51. }
  52. if (chains.size() > maxlen)
  53. {
  54. maxlen=chains.size();
  55. for (int j=0;j<maxlen;j++)
  56. cout<<chains[j]<<"->";
  57. cout<<"LENS:"<<maxlen<<endl;
  58. }
  59. }
  60. return 0;
  61. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-7-8 19:07:26 | 显示全部楼层
回楼上,多谢你的参与 此问题确实比较简单 看的就是穷举的策略和检测的算法
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-22 01:21 , Processed in 0.025962 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表