问题原题  见银河使者的随笔  http://www.cnblogs.com/nokiaguy/archive/2009/07/24/1530139.html
第一印象  我得到了和他一样的解法,就是用斜切片,每一层的 x-1和y+1  来控制顺序写数字的笔落在哪一个坐标。
但是根据一段时间的观察  我发现了几个规律 可以让我们不用模拟整个顺序的流

首先我们观察每一个切片

1 3 4 10 11 21 22 36 37 55
2 5 9 12 20 23 35 38 54 56
6 8 13 19 24 34 39 53 57 72
7 14 18 25 33 40 52 58 71 73
15 17 26 32 41 51 59 70 74 85
16 27 31 42 50 60 69 75 84 86
28 30 43 49 61 68 76 83 87 94
29 44 48 62 67 77 82 88 93 95
45 47 63 66 78 81 89 92 96 99
46 64 65 79 80 90 91 97 98 100

我们发现 在 n,n 坐标上的每一个数字都是这个切片对称 而且是平均值。 经过简单的计算  我们发现 1-n个切片的平均值 都是(n*n +1)/2

继续观察 又发现规律了。  这个矩阵对角对称的任意两个格子   正好是距离整个数列中心距离相等的两点  比如1和100 20和81   他们的和必为 max*max +1

这样我们只要能推算出某一行或者某一列的值   就可以通过上面两个特征来生成整个矩阵了哦

但是这个矩阵的行列太乱了 很难找出规律 这个时候就要考虑更简单的模型
我们看看非首尾接力的矩阵

1

1 2
3

1 2 4
3 5
6

1 2 4 7
3 5 8
6 9
10

有没有发现  粗体的数字 刚好是之前所有斜切片的总和?
那么 顺序矩阵和接力矩阵 有什么异同呢?

1 3 4 10 11 21 22 36 37 55
2 5 9 12 20 23 35 38 54 56
6 8 13 19 24 34 39 53 57 72
7 14 18 25 33 40 52 58 71 73
15 17 26 32 41 51 59 70 74 85
16 27 31 42 50 60 69 75 84 86
28 30 43 49 61 68 76 83 87 94
29 44 48 62 67 77 82 88 93 95
45 47 63 66 78 81 89 92 96 99
46 64 65 79 80 90 91 97 98 100

我们可以把接力矩阵当成隔行反转的顺序矩阵。这样我们就得到了一个在 x,y轴上摆动的参考值。  有了参考值  就可以根据前两点进行矩阵生成了

Code
   static void Main(string[] args)
        {
            var max = 11;
            int [,] mx=new int [max,max];
            var sideval = 0;
            for (var seed = 0; seed < max; seed++)
            {
               
                int parevalue = (seed + 1) * (seed + 1) + 1;//规律1 中心轴对称两数之和等于层数平方+1 
                bool isOdd = seed % 2 == 1;

sideval = sideval + seed + 1;   //规律2 两边至少有一个数字为 1+2+3+4++n
                for (var fillseed = seed; fillseed >=0; fillseed--)
                {

int row, col;
                    if (!isOdd)
                    {
                        row = fillseed;
                        col = seed - fillseed;

}
                    else
                    {
                        col = fillseed;
                        row = seed - fillseed;
                    }
                    //规律1 中心轴对称两数之和等于层数平方+1 
                    mx[col, row] = sideval - fillseed;
                    mx[row, col] = parevalue - mx[col, row];  
                    //规律3 中心对称的和为 max*max+1
                    mx[max - col - 1, max - row - 1] = max * max +1 - mx[col, row];
                    mx[max - row - 1, max - col - 1] = max * max + 1 - mx[row, col];

}

}

for (var x = 0; x < max; x++)
            {
                for (var y = 0; y < max; y++)
                {
                    Console.Write(string.Format (" {0:d3}" ,mx[x, y]));

}

Console.WriteLine();

}

Console.Read();

}

解法有很多种  这种无疑是很生涩的。 作为面试题目的话  并不建议写这种考官很难理解的解法,会有小鞋

作为头脑风暴  防止老年痴呆 这个还是有一定意义的

转载于:https://www.cnblogs.com/waynebaby/archive/2009/07/25/1530653.html

一时技痒 不用模拟第一印象的构造 通过三个观察得来的规律解决N^2个往返接力问题...相关推荐

  1. “AI颜狗”来啦!第一眼看到照片,就能预测人们对你的第一印象

    转自大数据文摘 世人皆是颜狗. 心理学家弗雷特说,以貌取人是人类的一种本能,这有可能是长期自然进化选择的结果. 因为人的大脑总是会选择对自己来说,是最不需要动脑思考的思维方式. 所以,人们就更倾向于通 ...

  2. 《Breaking The Walls》算法的第一印象和空间分割杂论

    <Breaking The Walls>算法的第一印象和空间分割杂论 这个算法来自于国外的一篇论文<Breaking the Walls: Scene Partitioning an ...

  3. 网络研讨室_网络研讨会:Java 9的第一印象–构建可伸缩企业应用程序的新方法...

    网络研讨室 在此网络研讨会上听我们对新Java版本的一些初步想法 关于Java 9的新版本,有很多宣传.将Java平台迁移到模块上,由Mark Reinhold领导的专门团队进行了近十年的艰苦工作. ...

  4. [免费网络研讨会] Java 11的第一印象

    一年多以前,我们正焦急地等待新的模块化Java 9的到来.大约在同一时间,引入了一个新的发布周期,该周期将每6个月发布一次新版本,并提供长期支持(LTS).每3年发行一次(或每6个版本发行一次). 根 ...

  5. 网络研讨会:Java 9的第一印象–构建可伸缩企业应用程序的新方法

    在此网络研讨会上听我们对新Java版本的一些初步想法 Java 9的新版本引起了很多炒作.在Mark Reinhold领导的专门团队的带领下,将Java平台迁移到模块花费了近十年的辛苦工作. 除了备受 ...

  6. gradle kotlin_我对Gradle Kotlin DSL的第一印象

    gradle kotlin by Adam Arold 亚当·阿罗德(Adam Arold) 我对Gradle Kotlin DSL的第一印象 (My first impressions of Gra ...

  7. Qt第一印象——Qte与Qt

    Qte即Qt/embedded,它是Qt的一个版本,要知道,它可不是其他版本(Qt/X11,Qt/mac)的子集,恰相反,Qte比他们包括更大的类库,可以说是他们的扩展. 刚开始,我对Qte很模糊,搞 ...

  8. SaaS营销网站剖析:SaaS主页,你给用户的第一印象

    你的主页就是用户对你的SaaS业务的第一印象.好的主页能为你的网站.品牌和产品吸引客户--让用户进入注册流程的下一个环节. 大家都知道好的主页能促进转化率.但如果想要准确计算你的转化率,就需要对主页的 ...

  9. 第6章第12节:幻灯片的第一印象很重要:融入情感 [PowerPoint精美幻灯片实战教程]

    能够留下美好的第一印象的幻灯片设计,不仅需要设计师的创造力,还需要融入设计师的感情. 和上一节相同,这张片子的主题也是情人节活动.幻灯片往往包含很多类型的元素,但是最能表达幻灯片作者情感的,莫过于图片 ...

最新文章

  1. 转赋值表达式解析的流程
  2. abap submit 的使用方法 不同情况
  3. Python爬虫! 单爬,批量爬,这都不是事!
  4. Tavas and Karafs 二分+结论
  5. PHP面向对象的魔术方法
  6. oracle 查看数据库启动时间同步,oracle rac CTSS时钟同步模式转换为NTP同步模式的实施记录(4)...
  7. golang 编译 执行时候报错cannot declare name db.Query
  8. 慕课软件质量保证与测试(第七章.课后作业)
  9. 转行3D建模,C4D与3ds Max哪个更好入门就业
  10. 京东AI:用于视觉识别的上下文Transformer网络-Contextual Transformer Networks for Visual Recognition
  11. 句子迷仿写篇一:实现底部导航栏
  12. 数字人事系统 java_市国税局“数字人事”信息系统正式上线
  13. CurrentThread
  14. 架构师推荐书籍 一
  15. 解决WPS及office二次开发接口无法注册的问题
  16. centos 6.6 安装图形界面 X server gnome Xwindows
  17. TSP 问题的几种经典建模方式
  18. Ubuntu Frp内网穿透+Samba 445端口
  19. 远程计算机或设备将不接受连接,IE无法上网
  20. 阿龙的学习笔记---C++ 进阶知识(博客汇总)

热门文章

  1. php 去除中英文空格,php去除字符串首尾中英文空格程序_PHP教程
  2. linux内核层是什么,从用户层到内核层 - Linux内核中的信号机制_Linux编程_Linux公社-Linux系统门户网站...
  3. 计算机重装系统知识,电脑重装系统基础知识扫盲贴
  4. CentOS6.5 将安装光盘作为yum源
  5. MySQL 错误 #1055
  6. 【Oracle】【日期、时间】 date与数字时间戳互转
  7. 怎么可以用计算机弄出表白数字,怎么用数字表白 表白爱情数字大全
  8. spring cloud Hystrix
  9. PHP堆实现TopK算法实例,top-k 算法浅析
  10. java 采样_java 采集数据