5kyu Square sums (simple)
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)相关推荐
- Competitive Programming 3题解
题目一览: Competitive Programming 3: The New Lower Bound of Programming Contests(1) Competitive Programm ...
- Go语言基础(codewars---6kyu和5kyu)
文章目录 说明 一.String相关题 1.Stop gninnipS My sdroW!(6kyu) 2.Consecutive strings(6kyu) 3.Build Tower(6kyu) ...
- 4kyu Sums of Perfect Squares
4kyu Sums of Perfect Squares 题目背景: The task is simply stated. Given an integer n (3 < n < 109) ...
- Integer overflow, simple but not easy
Our analysis and further investigation on proxyOverflow (CVE-2018–10376) and batchOverflow (CVE-2018 ...
- Square Destroyer UVA - 1603 IDA*
紫书的代码 写起来很麻烦 以后自己独立再写. 把完整图里面的正发形都枚举出来,算出每一个正方形是否差了边 然后ida*一直搜就好了 有意思的是 ida*的maxd是放在dfs()里面实现的 内附 ...
- 线段树版子题【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的任务就是要监视这些工兵营地的活动 ...
- 浅谈简单线性回归(Simple linear regression)part1原理推导
初等数学➡已知方程求未知数 高等数学→已知未知数,求方程(从数据中获得结论) 那么今天就从里面最简单的线性回归(Simple linear regression)开始学起 最简单的理解就是通过一些列运 ...
- Rapid Object Detection using a Boosted Cascade of Simple Features
转载自:Viola–Jones object detection framework–Rapid Object Detection using a Boosted Cascade of Simple ...
- Simple Gestures on Android
Simple Gestures on Android Simple Gestures on Android - CodeProject Simple Gestures on Android By Fr ...
最新文章
- python实现获取文件列表中每个文件关键字
- XenApp_XenDesktop_7.6实战篇之十四:XenDesktop虚拟桌面的交付
- react复制内容到剪贴板
- catia v5法矢数据软件_catia介绍
- WPF 用代码实现WrapPanel右侧自动对齐(解决多余空白问题)
- 【Proteus仿真8086】往8086 内存中写入数据
- 「支持m1」自定义菜单键盘快捷键——CustomShortcuts for mac
- TP-LINK TL-WR845N和腾达W311R怎么设置wds桥接
- android 焦点移动,Android TV 焦点上下左右移动
- struct字节计算
- 为Web登陆添加验证码功能
- python自动输入饥荒控制台代码
- M5stack StickCplus ESP32物联网开发板初体验
- c# 不可访问 因为它受保护级别限制
- 【git】eclipse使用git的过程中的问题,提示rejected - non-fast-forward错误的解决办法
- 暗示的力量如此可怕!父母请永远不要对孩子说的“三个字”
- 给信号添加高斯白噪声
- mysql使用SUM求和精度丢失
- scrapy分布式碰到的一些问题和解决方案
- KubeVirt with YRCloudFile 擦出创新的火花