回 帖 发 新 帖 刷新版面

主题:做出此题者一律加分30

21 — 22 — 23 — 24 — 25 — 26
       |                             |
       20    7  — 8  — 9 — 10    27
       |     |                 |    |
       19    6     1 — 2     11    28
       |     |           |      |   |
       18    5  — 4 —  3     12    :
       |                        |    :
       17 — 16 — 15 — 14 — 13  
    如图:将自然数1,2,3,4……排列成螺旋形,在数2处拐第一个弯,在数3处拐第二个弯,在数5处拐第三个弯……
    问:(1)拐第20个弯的地方是哪一个数?
        (2)拐第N个弯的地方是哪一个数?

回复列表 (共12个回复)

沙发

粗略看一下,求第N个拐弯上的数,可以这样算:
设有
k = N div 2
a = N mod 2 + 1

则 所求
x = k*k + a*k + a

=======================
第20个转弯:

k = 10
a = 1

x = 10*10 + 1*10 + 1 = 111

板凳

21 — 22 — 23 — 24 — 25 — 26
       |                             |
       20    7  — 8  — 9 — 10     27
       |     |                 |     |
       19    6     1 — 2     11     28
       |     |           |     |     |
       18    5  — 4 —  3    12      :
       |                       |      :
       17 — 16 — 15 — 14 — 13  
    
观察:你的‘—’的数是 1 1 2 2 3 3 4 4 ........这样递增
所以推断第一个弯 1+1=2; 第二个:2+1=3 第三个:3+2=5 .......
所以
f:=1;
for i:=1 to n do
  f:=f+((i-1) div 2)+1;

3 楼

呵呵!2楼的答案也是111啊!那支持~~~
“做出此题者一律加分30”,我连循环都不用打,手算都算出多少来,就是不给30分。
但是我愿意弄个眼花缭乱的公式出来,让人看得稀里糊涂不知道怎么回事,呵呵!(^_^)

4 楼

您的式子我真没看懂!不过挺厉害的,教教我好吗?

5 楼

呵呵~~~上来看了一下,看了楼主的加分,笑了半天~~~怎么加都不够30。不过我并不想要加分。只是想上来回一个帖给mythjoker:

你找出这样的规律很棒。我的公式,开始跟你的求证方法思路是不一样的。不过仔细想想我们两种解法其实是一样的,于是上来讲一个故事:

S = 1+2+3+4+……
它的前n项和是多少?

高斯小时候,他的老师,让全班同学算1+2+3+……+100=?。当其他同学都在一个数一个数地加时,高斯答案脱口而出:5050……

(讲到这里,好多网友扔了鸡蛋上来……别讲啦!这么老掉牙的故事谁都知道啦!jtchang你还讲~~~~)

那好,我讲一个新的故事:
一天,jtchag问大家:
S = 1+1+2+2+3+3+4+4+5……
它的前n项和是多少?然后把算出来的这个数再加上1是多少?

这时那些扔鸡蛋的人不敢再扔鸡蛋了,说:咦,高斯算的问题不是这样的啊,不大好算啊,我只会一个数一个数地加~所以最好的方法还是一个数一个数去加好了~

呵呵~~~ 开个玩笑而已~其实你也可以很轻易地写出一个公式来,并且证明自己的那个公式是对的。(^_^)

比如楼主的原题,N = 20 时,答案为什么是111?
x = 1+1+2+2+3+3+……+9+9+10+10     + 1
  = 2*(1+2+3+4+……+10)            + 1
  = 2*55       +1
  = 111

6 楼

呵呵!你真的好棒!
好有讲故事的天赋!!!
谢谢了!

你有时间的话去看看我发的皇后遍历问题好吗?
这么些天,没有一个人回,我好郁闷!嘿嘿!!!

7 楼

好厉害呀!小弟佩服!

8 楼

真厉害

9 楼

大致就是上面的结果(-_-!)

10 楼

var
n,i:integer;
k:longint;
begin
readln(n);
k:=2;
for i:=1 to (n-1) do k:=k+i;
writeln(k);
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册