题解 | 不要三句号的歪
不要三句号的歪
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
备面刷题笔记 文章被收录于专栏
积极准备面试中……