使用 Golang 实现一个方法 func checkList(list []int)(val int,ok bool),输入为一个整数数列(list []int),输出为预测改数列的下一个项的值 val 和是否找到规律 ok 比如 输入 []int{1,3,5,7,9} ,检测出它是等差数列,输出下一项的值 11 和找到了规律 true 输入数列的长度小于 3 时,作 无规律处理。比如:[1,3]判定无规律。[1,3,5]判定为等差数列 不用考虑 int 计算的溢出问题 需要支持的数列
等差数列:递增和递减的等差数列都需要支持
比如 [3,5,7,9,11],最终返回 13 和 true
比如 [11,9,7,5,3],最终返回 1 和 true
等比数列: 比如 [2,4,8,16,32],最终返回 64 和 true
等比数列的公比可以为负整数,但不能为小数
比如 [32,16,8,4,2],返回 0 和 false 即可
比如 [2,-4,8,-16,32],需返回 -64 和 true
开方等差数列: 如果一个数列可以对每一项开根号(比如负数,则认为不可以开根号,再比如 3,开根号无法得到整数,也认为不可以开根号。开根号只取正值,比如根号 4=2,不能等于-2 )并且得到的新的整数数列是等差数列,那么他就是开方等差数列,比如 [1,4,9,16,25],最终返回 36 和 true
上述三种数列的任意组合,可以多层嵌套
比如 [2,15,41,80] 先求两两之差,得到等差数列 [13,26,39],最终返回 132 和 true
比如 [1,2,6,15,31] 先求两两之差,得到平方等差数列 [1,4,9,16],最终返回 56 和 true
比如 [1,1,3,15,105,945] 先求两两之商,得到等差数列[1,3,5,7,9],最终返回 10395 和 true
比如 [2,14,64,202,502,1062,2004],先求两两之差,得到 [12,50,138,300,560,942],再求两两之差,得到 [38,88,162,260,382],再求两两之差,得到等差数列[50,74,98,122],最终返回 3474 和 true
无规律:其他所有未检查出规律的数列,最终返回 0 和 false
当数列同时满足多种规律时,同一级之间按照 等差数列 > 等比数列 > 开方等差数列 的优先级来计算。比如 [1,1,2,6],可以先求差,得到 [0,1,4] 得到平方等差数列,预测的结果为 15 。也可以先求商得到 [1,2,3] 是等差数列,预测的结果为 24 。按照优先级规则,返回先求等差的结果。所以 输入 [1,1,2,6],输出应该为 15 。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.