找回密码
 欢迎注册
楼主: iseemu2009

[原创] 一道趣题

[复制链接]
发表于 前天 10:47 | 显示全部楼层
wayne 发表于 2025-5-15 09:47
第三问,设$T=f(m,n)$,,那么逆推公式就是$m=\frac{R}{2}+T-\frac{R^2}{2}, n= \frac{R}{2}-T+\frac{R^2}{2}+ ...

谢谢 wayne!应该是这个。谢谢 wayne!

Table[R = Round[Sqrt[2] T]; {(R - R^2 + 2 T^2)/2, (R + R^2 - 2 T^2 + 2)/2}, {T, 39}]

{{1, 1}, {1, 3}, {3, 2}, {1, 6}, {4, 4}, {8, 1}, {4, 7}, {9, 3}, {3, 11}, {9, 6}, {1, 16}, {8, 10}, {16, 3}, {6, 15}, {15, 7}, {3, 21}, {13, 12}, {24, 2}, {10, 18}, {22, 7}, {6, 25},
{19, 13}, {1, 33}, {15, 20}, {30, 6}, {10, 28}, {26, 13}, {4, 37}, {21, 21}, {39, 4}, {15, 30}, {34, 12}, {8, 40}, {28, 21}, {49, 1}, {21, 31}, {43, 10}, {13, 42}, {36, 20}}

补充内容 (2025-5-17 05:28):
Table[R = Round[Sqrt[2 T]]; {R - R^2 + 2 T, R + R^2 - 2 T + 2}/2, {T, 39}]

点评

那是肯定的——2不能拿到根号外面,要放里面。  发表于 7 小时前
但是2不能拿到根号外面,要放里面  发表于 昨天 20:40
确实可以是Round[Sqrt[2 T]  发表于 昨天 20:39
认真看了, 1可以去掉。  发表于 前天 17:46
不认真看一下吗,是Round[2T-1]  发表于 前天 17:24
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 前天 11:00 | 显示全部楼层
王守恩 发表于 2025-5-15 10:47
谢谢 wayne!应该是这个。谢谢 wayne!

Table[R = Round[Sqrt[2] T]; {(R - R^2 + 2 T^2)/2, (R + R^2 - ...

根据这个计算,2应该是1,2吧?你的表怎么没有?
究竟是谁错了,还是都是错误的?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 前天 11:15 | 显示全部楼层
本帖最后由 iseemu2009 于 2025-5-15 11:40 编辑

下面是我设计的一个更有视觉效果的程序,p是我们想查看的任意一个数字,值可以改动。

  1. Clear["`*"]
  2. p = 49;
  3. (*任意输入一个整数 *)
  4. n = IntegerPart[(1 + Sqrt[8 p - 7])/2];   

  5. x = Prepend[Table[1 + Accumulate[Range[n - 1]]], 1];      

  6. f[x_] := Rest[Table[1 + x]];      
  7. (*创建函数f(x),x是一个表,把表中各元素加1后,再去掉第一个元素  *)

  8. k = (n^2 + n)/2 - p;
  9. (*此步是计算斜行最后一个数字距p有多远。比如差2,意味着斜行最后两个元素没有,只到p就完了。后面就要想办法把最后两行的最后一个元素分别去掉\
  10.   *)

  11. a = NestList[f, x, n - 1];
  12. (*将x运用到f函数n-1次,显示每步的结果。最后是一个嵌套列表。 *)

  13. b = Table[a[[-i]], {i, k}];
  14. (*此步是提取b中的最后k个元素。但它是倒着排列的,不是我想要的顺序*)

  15. c = Reverse[b];
  16. (*把b中所有元素颠倒过来排列  *)

  17. d = Drop[a, -k];
  18. (*去掉a中的最后k个元素,这些是我不想要的。为下一步使用Join命令做准备  *)

  19. e = Table[Drop[c[[i]], -1], {i, k}];
  20. (*分别去掉最后k行中最末一个元素*)

  21. f = Drop[e, -1];

  22. g = Join[d, f];

  23. h = ToString[#] <> "列" & /@Range[n];

  24. i = Join[{h}, g];

  25. m = Flatten[i, {2}];

  26. l = ToString[#] <> "行" & /@ Range[n - 1];

  27. o = Join[{" "}, l];

  28. q = Join[{o}, m];

  29. r = Flatten[q, {2}];

  30. Grid[r, Dividers -> All,
  31.   ItemStyle -> {1 -> Directive[Bold, Blue],
  32.     1 -> Directive[Bold, Red], {n - k + 1, k + 2} ->
  33.      Directive[Bold, Red]},
  34.   Frame -> {None, None, {n - k + 1, k + 2} -> True},
  35.   Spacings -> {1, 1}, Alignment -> {{Left, {Right}}},
  36.   Background -> {Automatic,
  37.     Automatic, {{{n - k + 1, n - k + 1}, {1, k + 1}} ->
  38.       Lighter[Yellow, 0.5], {{1, n - k}, {k + 2, k + 2}} ->
  39.       Lighter[Yellow, 0.5], {n - k + 1, k + 2} ->
  40.       Lighter[Green, 0.3]}}] // Text


复制代码

点评

nyy
不把最后结果弄出来,基本上就是白弄了  发表于 昨天 11:50
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 前天 11:25 | 显示全部楼层
程序说明
说明.png

点评

nyy
好像你的思路与我的思路差不多  发表于 昨天 10:40
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
回复

使用道具 举报

发表于 前天 12:28 | 显示全部楼层
搞的还是太复杂了. 把9#的放进来,整个画图 就两行代码的事情.
  1. f=Function[{TT},Function[{R,T},{R/2-R^2/2+T,R/2+R^2/2+1-T}][Round[Sqrt[2 TT-1]],TT]];
  2. Grid[Normal[SparseArray[Table[f[k]->Style[k,Blue,20],{k,200}]]],Frame->All]
复制代码

点评

f = Function[{TT}, Function[{R, T}, {R - R^2 + 2 T, R + R^2 - 2 T + 2}][ Round[Sqrt[2 TT]], TT]]; Grid[Normal[ SparseArray[Table[f[k]/2 -> Style[k, Blue, 20], {k, 200}]]], Frame -> All]   发表于 昨天 13:26
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 前天 12:47 | 显示全部楼层
wayne 发表于 2025-5-15 09:47
第三问,设$T=f(m,n)$,,那么逆推公式就是$m=\frac{R}{2}+T-\frac{R^2}{2}, n= \frac{R}{2}-T+\frac{R^2}{2}+ ...

Table[R = Round[Sqrt[2] T]; {(R - R^2 + 2 T^2)/2, (R + R^2 - 2 T^2 + 2)/2, (R - R^2 + 2 T^2)/2 + (R + R^2 - 2 T^2 + 2)/2}, {T, 39}]

{{1, 1, 2}, {1, 3, 4}, {3, 2, 5}, {1, 6, 7}, {4, 4, 8}, {8, 1, 9}, {4, 7, 11}, {9, 3, 12}, {3, 11, 14}, {9, 6, 15}, {1, 16, 17}, {8, 10, 18}, {16, 3, 19}, {6, 15, 21}, {15, 7, 22}, {3, 21, 24}, {13, 12, 25}, {24, 2, 26}, {10, 18, 28}, {22, 7, 29}, {6, 25, 31},
{19, 13, 32}, {1, 33, 34}, {15, 20, 35}, {30, 6, 36}, {10, 28, 38}, {26, 13, 39}, {4, 37, 41}, {21, 21, 42}, {39, 4, 43}, {15, 30, 45}, {34, 12, 46}, {8, 40, 48}, {28, 21, 49}, {49, 1, 50}, {21, 31, 52}, {43, 10, 53}, {13, 42, 55}, {36, 20, 56}}

第3个数是前2个数的和。我只想把第3个数没有的数拉出来——1, 3, 6, 10, 13, 16, 20, 23, 27, 30, 33, 37, 40, 44, 47, 51, 54——怎么拉——我是拉不出来——OEIS没有这串数。谢谢!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 前天 14:57 | 显示全部楼层
本帖最后由 iseemu2009 于 2025-5-15 15:01 编辑
王守恩 发表于 2025-5-15 12:47
Table[R = Round[Sqrt[2] T]; {(R - R^2 + 2 T^2)/2, (R + R^2 - 2 T^2 + 2)/2, (R - R^2 + 2 T^2)/2 + ( ...


你的这个数据很好提出来,下面程序中 a就是你原来的数据,b 就是提出 a 中所有子表的第3个元素,c 就是把 b 中最后一个最大的元素提出来,并用 Range函数生成 1-56。最关键的就是 d,它是求 b 和 c 两个表中没有的元素(共同的元素消去了)。

  1. Clear["`*"]
  2. a = Table[R = Round[Sqrt[2]  T]; {(R - R^2 + 2  T^2)/2, (R + R^2 - 2  T^2 + 2)/2, (R - R^2 + 2  T^2)/2 + (R + R^2 - 2  T^2 + 2)/2}, {T, 39}];
  3. b = #[[3]] & /@ a;
  4. c = Range[Last[b]];
  5. d = Complement[c, b]
复制代码

  1. {1, 3, 6, 10, 13, 16, 20, 23, 27, 30, 33, 37, 40, 44, 47, 51, 54}
复制代码

点评

这样也可以——我能拉出来了。  发表于 前天 15:45
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 前天 15:27 | 显示全部楼层
iseemu2009 发表于 2025-5-15 14:57
你的这个数据很好提出来,下面程序中 a就是你原来的数据,b 就是提出 a 中所有子表的第3个元素,c 就是把 ...

第3个数可以这样出来——Table[Round[Sqrt[2] T] + 1, {T, 39}]

{2, 4, 5, 7, 8, 9, 11, 12, 14, 15, 17, 18, 19, 21, 22, 24, 25, 26, 28, 29, 31, 32, 34, 35, 36, 38, 39, 41, 42, 43, 45, 46, 48, 49, 50, 52, 53, 55, 56}

我还是不知道怎么把第3个数没有的数拉出来——1, 3, 6, 10, 13, 16, 20, 23, 27, 30, 33, 37, 40, 44, 47, 51, 54,

点评

A22846——有这串数——1, 3, 4, 6, 7, 8, 10, 11, 13, 14, 16, 17, 18, 20, 21, 23, 24, 25, ...  发表于 前天 16:53
上面已经说的很清楚了啊,你的结果数据中最后一个是56,那么我们可以重新生成一个数列 Range[56],两个数列作去同处理就得到你想要的结果。  发表于 前天 15:41
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 前天 15:45 | 显示全部楼层
王守恩 发表于 2025-5-15 15:27
第3个数可以这样出来——Table[Round[Sqrt[2] T] + 1, {T, 39}]

{2, 4, 5, 7, 8, 9, 11, 12, 14, 15, 17 ...
  1. a = {2, 4, 5, 7, 8, 9, 11, 12, 14, 15, 17, 18, 19, 21, 22, 24, 25, 26,
  2.    28, 29, 31, 32, 34, 35, 36, 38, 39, 41, 42, 43, 45, 46, 48, 49, 50,
  3.    52, 53, 55, 56}
  4. b = Range[56]
  5. c = Complement[b, a]
复制代码

点评

谢谢!可以了。a = Table[Round[Sqrt[2] T] + 1, {T, 39}]; b = Range[Sqrt[2]*39]; c = Complement[b, a]  发表于 前天 16:00
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 前天 16:18 | 显示全部楼层
先算出在第1行的多少列,取下整,
然后看还缺多少,然后改变行与列!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2025-5-17 12:57 , Processed in 0.066673 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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