资讯专栏INFORMATION COLUMN

赛码网编程题--“股神”

SexySix / 1443人阅读

摘要:昨天看到了赛码在线编程的一道题,热度很高。赛码股神题目是这样的涨一天,跌一天,涨两天,跌一天看似很有规律,看似很简单。给大神跪了。。。大神们的解法简单易懂的方法以上是最高票的答案。。。

昨天看到了赛码在线编程的一道题,热度很高。赛码-股神
题目是这样的:

涨一天,跌一天,涨两天,跌一天....看似很有规律,看似很简单。但昨天尝试了一下,发现还是有点麻烦,因为他的数据范围很大(10^9),绝对不能再嵌套循环!
然后我翻了下大神们的答案。。。给大神跪了。。。

大神们的解法
var cmd = require("node-stdio");

var func = (n) => {
    let i = 0,
        k = 2,
        j = 2;
    while(k < n) {
        i = i + 2;
        j = j + 1;
        k = k + j;
    }

    return n - i;
}

var line;
while((line=cmd.readInt()) != null){
    cmd.print(func(line));
}
简单易懂的方法

以上是最高票的答案。。。讲道理我没怎么看懂。。。反正膜拜就对了
赞数靠前的大神们,基本也是像这样用数学方法算的。
但我觉得这种方法不易懂,至少不适合我。
那有没有更简单的方法呢?今天又琢磨了一下,想到了一个超简单的方法,突然感觉成就感max哈哈。
我的解法的核心思想就是图形化,把抽象具体化。

涨一天,跌一天,涨两天,跌一天,将这种状态具体化记录下来,可以这样:10110 。聪明的你肯定懂了,下面直接上代码

const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal:false
})

rl.on("line", (line) => {
    let n = +line.trim()
    let mark = "1", res = 1
    for(let i=0, k=1; mark.length < n; i++) {
      let ans = Math.min(k,n - mark.length)
      if(i%2 == 1) {
        mark += 0
        res--
      } else {
        mark += "1".repeat(ans)
        res += ans
        k++
      }
    }
    console.log(res)
})

甚至都不需要记录这个状态字符串,因为他只需要最终的价格,所以优化后代码如下:

const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal:false
})

rl.on("line", (line) => {
    let n = +line.trim()
    let day = 1, res = 1 //mark是Number类型就可以了,代表第几天
    for(let i=0, k=1; day < n; i++) {
      let ans = Math.min(k,n - day)
      if(i%2 == 1) {
        day++
        res--
      } else {
        // mark += "1".repeat(ans)
        day += ans
        res += ans
        k++
      }
    }
    console.log(res)
})

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97663.html

相关文章

  • 赛码模拟股神 stockmaster (java8)

    摘要:我认为赛码的题挺有趣的其实,所以还是值得做。还有更快的方法,举例发现股价和天数之间是有一些规律的发现同一递增周期内股价与天数的差值相同。接下来只要能总结出天数和差值的关系就能知道股价了。 题目: 股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天...依此类推。为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱?例子...

    张汉庆 评论0 收藏0
  • 时js的输入问总结

    摘要:牛客网其中只支持单行输入赛码网注意,如果一行超过个字符,会被强制分行的,因此如果题目明确说明该行超过字符,请自行拼接当然,我们尽量不出这种题目。 刷题时js的输入问题总结大部分来自于 http://www.cnblogs.com/floor/... 感谢解决燃眉之急 还有小部分是自己的整理和思考 目前常见平台还不太支持ES6写法 推荐js刷题平台 https://www.codewa...

    Hancock_Xu 评论0 收藏0
  • 前端开发应届生面试指南(含各大公司具体指南及面试真

    摘要:先介绍一下本人应届前端开发一枚,非科班出身,专业是化学,大学期间开始自学前端开发,在今年春招实习和秋招的时候投了一些公司,拿到一些京东拼多多虎牙等,总体来说还算满意,特地写一篇文章来总结一下面试的那些套路。 showImg(https://segmentfault.com/img/remote/1460000011897700); 先介绍一下本人应届前端开发一枚,非科班出身,专业是化学...

    sunnyxd 评论0 收藏0
  • 前端开发应届生面试指南(含各大公司具体指南及面试真

    摘要:先介绍一下本人应届前端开发一枚,非科班出身,专业是化学,大学期间开始自学前端开发,在今年春招实习和秋招的时候投了一些公司,拿到一些京东拼多多虎牙等,总体来说还算满意,特地写一篇文章来总结一下面试的那些套路。 showImg(https://segmentfault.com/img/remote/1460000011897700); 先介绍一下本人应届前端开发一枚,非科班出身,专业是化学...

    jeyhan 评论0 收藏0
  • 前端开发应届生面试指南(含各大公司具体指南及面试真

    摘要:先介绍一下本人应届前端开发一枚,非科班出身,专业是化学,大学期间开始自学前端开发,在今年春招实习和秋招的时候投了一些公司,拿到一些京东拼多多虎牙等,总体来说还算满意,特地写一篇文章来总结一下面试的那些套路。 showImg(https://segmentfault.com/img/remote/1460000011897700); 先介绍一下本人应届前端开发一枚,非科班出身,专业是化学...

    lentoo 评论0 收藏0

发表评论

0条评论

SexySix

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<