这道题目翻译成中文:从 1 到 1000 的自然数如图所示连续地从左到右排列成一个三角形。每一行的数字比它下面一行多一个。请问:723 正上方的数字是多少?
假设我们用i表示行数,从下往上分别是0、1、2、3...;我们用j表示列数,从左到右分别是0、1、2...。我们用n_i表示每行的数字,则n_i是一个等差数列:1、2、3...n_i
题目要求找到图案中723这个数字,并且找出这个数字上面的那个数字x是多少?我们需要求解723这个数字在哪一行哪一列?也即是其对应的i和j是多少?
先求解在哪一行?如果构造的图案有i行,第i行的数字个数为i+1,也就是n_i = i+1。
第i行最后一个数字n_i是:
我们现在要求n_i是大于723的最小数。也就是
我们知道:1/2*37*38=703; 1/2*38*39=741
因此,我们知道723这个数对应的行序号i=38-1=37行,这一行最后一个数字是741,这一行最开始的数字是703+1=704,对应的列序号j是723-704=19.
图案中723上面的数字x对应的行序号是38,这一行第一个数字是741+1=742,数字x的值是:x=742+19=761;
这道题目也可以Python编程来求解。暴力求解是比较简便的方式。基本原理仍是按行(行序号为i)和列(列序号为j)来构造图案。图案中每个数字n_ij(也就是行i和列j对应的数字)是一个等差数列:从1开始,每次加1。当n_ij等于723时,记下此时的i和j。有了这个再计算i+1行和j列对应的数字,也就是图案中723上面的数字。
Python代码如下:
count = 0
i = 0
while (1):
for j in range(i+1):
count += 1
if (count >= 723):
break
if (count >= 723):
break
else:
i += 1
count_i_begin = count - j
count_i_end = count_i_begin + i
count_i1_begin = count_i_end + 1
count_i1_j = count_i1_begin + j
print("the number at the top of 723 is %d" %count_i1_j)
运行这段代码,截屏如下。可以看到正确的结果是761,和数学推演方法一致。
顺便说一下,如果将这个题目直接扔给大模型,如豆包,豆包给出的答案是错误的,截屏如下: