题解 | 不要三句号的歪

不要三句号的歪

https://www.nowcoder.com/practice/7cbb7d96fb354f7995d9af1ccf8906b4?tpId=37&tags=&title=&difficulty=&judgeStatus=&rp=1&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&gioEnter=menu

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    while(line = await readline()){
	  	// 取出第一、二和最后一项并转换成整数存放在数组中
        let tokens = line.split(',').filter(item => item !== '...').map(item => parseInt(item));
	  	// 处理符合要求的输入
        if (tokens.length === 3) {
		  	// 根据第一、二项计算数列的公差d = a₂ - a₁
            let diff = tokens[1] - tokens[0];
		  	// 输出数列中省略的数字个数 = [(aₙ - a₁) / d] + 1 - 3
            console.log((tokens[2] - tokens[0]) / diff - 2);
        }
	  	// 非法输入直接输出0
        else console.log(0);
    }
}()

解题思路:通用思路,不要求数列必须连续,允许差值。

该题目考察的实际是数学中的等差数列。通过输入可以拿到第一、二项和最后一项,进而得到公差,再根据项数公式获取总项数,减去已输入的三项就是被省略的项数,即输出。

n = [(aₙ - a₁) / d] + 1
省略项数 = [(aₙ - a₁) / (a₂ - a₁)] + 1 - 3
		= [(aₙ - a₁) / (a₂ - a₁)] - 2

等差数列:是指一个数列中,任意两个相邻项的差值(公差)相等的数列。

数列的第一项记作a₁,公差记作d,第n项记作aₙ,前n项和记作Sₙ。有以下公式:

1)通项公式(求第n项)

aₙ = a₁ + (n - 1) × d

2)前n项和公式

Sₙ = n × (a₁ + aₙ) / 2
或
Sₙ = n × [2a₁ + (n - 1)d] / 2

3)已知任意两项,求公差

d = (aₘ - aₙ) / (m - n)  (m ≠ n)

4)项数公式(已知第一项、最后一项和公差)

n = [(aₙ - a₁) / d] + 1

5)任意三个连续项a,b,c关系

b = (a + c) / 2

备面刷题笔记 文章被收录于专栏

积极准备面试中……

全部评论

相关推荐

双非阴暗爬行:我来看看笑死我了,这名字取得好想笑(没有不好的意思)
点赞 评论 收藏
分享
03-29 14:19
门头沟学院 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务