5kyu Square sums (simple)

题目背景:

Task

Write function square_sums_row (or squareSumsRow/SquareSumsRow depending on language rules) that, given integer number N (in range 2…43), returns array of integers 1…N arranged in a way, so sum of each 2 consecutive numbers is a square.

Example
For N=15 solution could look like this:
[ 9, 7, 2, 14, 11, 5, 4, 12, 13, 3, 6, 10, 15, 1, 8 ]

题目分析:

本道题题面的意思很容易领会,就是将1-N的数按照一定顺序排列后,使得相邻的两个数两两相加为一个平方数。但是题目的下手点比较棘手,最简单的思路就是DFS,从第一个数设置为 1 - N中的任意一个,之后不断深搜遍历,直至找到最终的解法,这种思路比较朴素,不过对我个人而言,我个人不是很擅长写DFS代码,也可能是写得比较少orz。不过本道题如果采用DFS算法,因为数据量较少,直接深搜也可以AC。先附上DFS的AC代码,之后会讨论下另一种解法的思路。

AC代码:

import numpy
success = False
ans = [0 for i in range(44)]
hash1 = [False for i in range(44)]def judge(num1, num2):if numpy.square(numpy.floor(numpy.sqrt(num1 + num2))) == num1 + num2: return Trueelse: return Falsedef Dfs(num, cnt):global successif(num > 1):if(judge(ans[num], ans[num-1]) == False): returnif(num == cnt): success = Truereturn for i in range(2, cnt + 1):if not hash1[i]:ans[num + 1] = ihash1[i] = TrueDfs(num + 1, cnt)if success: returnhash1[i] = Falsedef square_sums_row(n):global successfor i in range(1, n + 1):for j in range(1, n + 1): hash1[j] = Falseans[1] = ihash1[i] = Truesuccess = FalseDfs(1, n)if success: return ans[1: n + 1]return False

第二种思路:
这是我在草稿上演练时想到的思路,感觉是一个更优的思路的一部分,不过因为自己没有理清楚代码如何编写,就只好说下思路了。大致的想法是,对于1 - N的每个数当做图中的一个节点,然后每个节点去找和它之和为平方数的节点,节点之间如果和为平方数那么添加一条连线,最后就就相当于在整个图中找一条连线可以把所有的节点过一遍同时每个节点只经过一次,如果找到,那么存在一个排列满足题目要求,否则不存在返回false。

如图中所示,我们找到一个连线可以将所有节点过一遍同时只经过每个节点一遍:9 -> 7 -> 2 -> 14 -> 11 -> 5 -> 4 -> 12 -> 13 -> 3 -> 6 -> 10 -> 15 -> 1 -> 8

5kyu Square sums (simple)相关推荐

  1. Competitive Programming 3题解

    题目一览: Competitive Programming 3: The New Lower Bound of Programming Contests(1) Competitive Programm ...

  2. Go语言基础(codewars---6kyu和5kyu)

    文章目录 说明 一.String相关题 1.Stop gninnipS My sdroW!(6kyu) 2.Consecutive strings(6kyu) 3.Build Tower(6kyu) ...

  3. 4kyu Sums of Perfect Squares

    4kyu Sums of Perfect Squares 题目背景: The task is simply stated. Given an integer n (3 < n < 109) ...

  4. Integer overflow, simple but not easy

    Our analysis and further investigation on proxyOverflow (CVE-2018–10376) and batchOverflow (CVE-2018 ...

  5. Square Destroyer UVA - 1603 IDA*

    紫书的代码 写起来很麻烦 以后自己独立再写. 把完整图里面的正发形都枚举出来,算出每一个正方形是否差了边 然后ida*一直搜就好了    有意思的是 ida*的maxd是放在dfs()里面实现的 内附 ...

  6. 线段树版子题【HDU - 1166 敌兵布阵】【HDU-1754 I Hate It】【HDU-1698 Just a Hook】【OpenJ_Bailian3439A Simple Pro】

    敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动 ...

  7. 浅谈简单线性回归(Simple linear regression)part1原理推导

    初等数学➡已知方程求未知数 高等数学→已知未知数,求方程(从数据中获得结论) 那么今天就从里面最简单的线性回归(Simple linear regression)开始学起 最简单的理解就是通过一些列运 ...

  8. Rapid Object Detection using a Boosted Cascade of Simple Features

    转载自:Viola–Jones object detection framework–Rapid Object Detection using a Boosted Cascade of Simple ...

  9. Simple Gestures on Android

    Simple Gestures on Android Simple Gestures on Android - CodeProject Simple Gestures on Android By Fr ...

最新文章

  1. python实现获取文件列表中每个文件关键字
  2. XenApp_XenDesktop_7.6实战篇之十四:XenDesktop虚拟桌面的交付
  3. react复制内容到剪贴板
  4. catia v5法矢数据软件_catia介绍
  5. WPF 用代码实现WrapPanel右侧自动对齐(解决多余空白问题)
  6. 【Proteus仿真8086】往8086 内存中写入数据
  7. 「支持m1」自定义菜单键盘快捷键——CustomShortcuts for mac
  8. TP-LINK TL-WR845N和腾达W311R怎么设置wds桥接
  9. android 焦点移动,Android TV 焦点上下左右移动
  10. struct字节计算
  11. 为Web登陆添加验证码功能
  12. python自动输入饥荒控制台代码
  13. M5stack StickCplus ESP32物联网开发板初体验
  14. c# 不可访问 因为它受保护级别限制
  15. 【git】eclipse使用git的过程中的问题,提示rejected - non-fast-forward错误的解决办法
  16. 暗示的力量如此可怕!父母请永远不要对孩子说的“三个字”
  17. 给信号添加高斯白噪声
  18. mysql使用SUM求和精度丢失
  19. scrapy分布式碰到的一些问题和解决方案
  20. KubeVirt with YRCloudFile 擦出创新的火花

热门文章

  1. 实验五 输入输出练习_JAVA
  2. 字符串扩展_JAVA
  3. 机器学习系列(9)_机器学习算法一览(附Python和R代码)
  4. 「消息队列」看过来!
  5. 关于HOG特征的一个Python代码
  6. java学习笔记4--对象的初始化与回收
  7. MIT自然语言处理第二讲:单词计数(第三、四部分)
  8. 程序员面试题精选100题(12)-从上往下遍历二元树[数据结构]
  9. 访问图像中每个像素的值
  10. matlab R2014a添加路径