V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
petrichor08
V2EX  ›  程序员

一个 golang 的题,求个思路

  •  
  •   petrichor08 · 2021-07-31 15:45:51 +08:00 · 2370 次点击
    这是一个创建于 1234 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 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 。
    
    2 条回复    2021-08-01 21:48:17 +08:00
    Zhuzhuchenyan
        1
    Zhuzhuchenyan  
       2021-07-31 16:20:14 +08:00
    看到这题感觉回到了大学。

    如果仅仅要求支持以上的几种形态的话,简单的做法就是定义等差,等比,开方等差的规则,然后判断当前数列不满足条件时,做差去递归求解就是了。别忘了加上最大递归层数的限制。后期如果增加需求加规则就好了。

    不想要仅仅如此的话可以看一下如何做一个求解器,举个现成的例子,你在 wolfram alpha 上直接搜索 1,3,5,7,9,他就会提示你这是个等差数列,并给出通项公式,网址: https://www.wolframalpha.com/input/?i=3%2C5%2C7%2C9%2C11

    最后,作业还是自己做吧。
    nowgoo
        2
    nowgoo  
       2021-08-01 21:48:17 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4981 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 05:45 · PVG 13:45 · LAX 21:45 · JFK 00:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.