24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1280  |  回复: 6
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

holmescn

金虫 (正式写手)

[交流] Euler 工程 第廿八题:旋转矩阵对角线的和已有4人参与

这是旋转矩阵是这样生成的:  中心是1, 然后向右移动, 并按顺时针方向旋转, 这样生成的一个5x5的矩阵如下所示

21 22 23 24 25
20   7   8   9 10
19   6   1   2 11
18   5   4   3 12
17 16 15 14 13

其对角线上的和为101

如果这个把这个矩阵扩大到1001x1001,那它的对角元素的和是多少呢?

[ Last edited by holmescn on 2011-6-17 at 08:58 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

引用回帖:
Originally posted by fan6cy at 2011-06-19 16:48:28:
sum =

   669171001

Elapsed time is 0.000000 seconds.



clear,clc
tic
N0=1001;
i=3;sum=1;
while i<=N0
    sum=sum+i*(4*i-6)+6;
    i=i+2;
end
sum
toc

发代码要学会用BBCode喔
6楼2011-06-19 17:00:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 7 个回答

holmescn

金虫 (正式写手)

★ ★ ★
余泽成(金币+3): 辛苦了! 2011-06-18 16:11:07
Matlab版:
CODE:
l = 2;
s = 1;
b = 3;
e = 9;
while 2*l-1 <= 1001
    s = s + sum(linspace(b, e, 4));
    b = e + 2*l;
    e = b + 2*l*3;
    l = l + 1;
end
fprintf('sum=%d\n', s);

结果: 669171001
2楼2011-06-17 09:18:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-17 18:22:26
余泽成(金币+3): 鼓励讨论! 2011-06-18 16:11:21
这个问题直接用数列算可以算出来。
这个蜗牛壳的每圈圈数是一个等差数列:
第一圈是1
第二圈是4*(2*2-1-1) = 8
第三圈是4*(2*3-1-1) = 16
第k圈是4*(2*k-1-1) = 8k-8
第k圈的边长是2k-1,第k圈的右上角那个数是前面k圈求和所得
第一圈是1
第二圈是1+8 = 9
第三圈是1+8+16=25
第k圈是4k^2-4k+1
根据边长可以前推3次,为了数学美,当然也可以从k-1圈后推3次,就可以依次求出四个角的通项公式:
第一圈是1
第二圈是1+2=3,1+2*2=5,1+2*3=7,1+2*4=9
第三圈是9+4=13,9+4*2=17,9+4*3=21,9+4*4=25
第k圈的边长是2k-1,步长是2k-2,计算可得:
右下角的:4k^2-10k+7
左下角的:4k^2-8k+5
左上角的:4k^2-6k+3
右上角的:4k^2-4k+1
进而直接按照通项公式可以求解。
漩涡的中心有一块空地,空空的。
3楼2011-06-17 11:32:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-17 18:22:33
余泽成(金币+2): 鼓励交流! 2011-06-18 16:11:33
matlab的,
奇数周长, 不计中间的1,每圈4个数从大到小是: len^2开始,间隔len-1
len^2
len^2-(len-1)
len^2-2*(len-1)
len^2-3*(len-1)
CODE:
function result = euler28()
tic;
result = 1;
% faster than using SUM(...)
for i=3:2:1001
    d = i*i;
    result = result+d;
    d = d+1-i;
    result = result+d;
    d = d+1-i;
    result = result+d;
    d = d+1-i;
    result = result+d;
end
toc;
end

结果
CODE:
% Elapsed time is 0.000014 seconds.
% ans =
%    669171001

[ Last edited by libralibra on 2011-6-19 at 16:55 ]
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
4楼2011-06-17 15:04:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见