D20_數字位數加總、判斷等比數列


Posted by Christy on 2021-05-08

Unit5.4:實戰:數字位數加總

題目:
給一個數字 n,求所有數字相加總和。
例如 1234,輸出 10;0 與 1 分別輸出 0 與 1

Find the summation of a number 'n',
if n = 1234, return 10;
if n = 0, return 0,
if n =1, return 1

function add(n) {
    let sum = 0
    while (n != 0) {
        sum += n % 10
        n = Math.floor(n /10)
    }
    return sum
}

console.log(add(1234)) //10
console.log(add(1)) //1
console.log(add(0)) //0
console.log(add(1200)) //3

LIOJ 1026 判斷等比數列

題目:判斷是否為等比數列
Find if an array is geometric progression or not

function Geo(arr) {
    if (arr.length <= 1) {
        return true
    }
    let t = arr[1] / arr[0]
    for (i = 1; i< arr.length; i++) {
        if (arr[i] / arr[i - 1] !== t){
            return false
        }
    }
    return true
}

console.log(Geo([2, 4, 8]))
console.log(Geo([2]))
console.log(Geo([2, 4, 9]))
console.log(Geo([]))
  • 接下來就要進入 LIOJ 輸入的部分了,如果是第一次用的話,還真的有點難:

The online judge system is not easy to understand at the first beginning...

var readline = require('readline');

var lines = []
var rl = readline.createInterface({
  input: process.stdin
});

rl.on('line', function (line) {
  lines.push(line)
});

rl.on('close', function() {
  solve(lines)
})

-----這裡以上都可以複製貼上就好-----

/*
從這裡開始看,
理論上應該只會有
function solve(lines) {
}
Lines 是我的輸入資料,是一個陣列的形式,它可能會有一行,
也可能有很多行,它代表傳進去的參數,
LIOJ 的第一題輸入為 1 2,
代表輸入只有一行,所以我們要先拿到第一行資料,
也就是「陣列的第一個元素」,所以用 lines[0],
如果忽略了「陣列的第一個元素」這句話,就會變成有點難理解。
接著再把那一行資料用空白分割,取出資料後寫出題目想要的運作模式,如下:

lines means the parameter,every line is an array element, 
even though it looks like this '1 2 1', 
it's still ONE array element

so first line = lines[0]
second line  = lines[1]
ans use split with space to separate them
*/

function solve(lines) {
    let firstline = lines[0]
    let ans = firstline.split(' ')
    console.log(Number(ans[0]) + Number(ans[1]))
}
  • 答案在這裡,所以要輸入 LIOJ 的程式碼長這樣。
  • 我的天啊,阿母我出運了,被 AC 了好感動,嗚嗚嗚。
var readline = require('readline');

var lines = []
var rl = readline.createInterface({
  input: process.stdin
});

rl.on('line', function (line) {
  lines.push(line)
});

rl.on('close', function() {
  solve(lines)
})

function solve(lines) {
    let line = lines[1]
    let arr = line.split(' ')

    if (Geo(arr) == true) {
        console.log('Yes')
    } else console.log('No')
}

function Geo(arr) {
    if (arr.length <= 1) {
        return true
    }
    let t = arr[1] / arr[0]
    for (i = 1; i< arr.length; i++) {
        if (arr[i] / arr[i - 1] !== t){
            return false
        }
    }
    return true
}









Related Posts

如何使用 K8S 自動化定期 CronJob 抓網路公開資料

如何使用 K8S 自動化定期 CronJob 抓網路公開資料

C# 顯示電腦時間

C# 顯示電腦時間

給自己看的 JS 進階-Closure

給自己看的 JS 進階-Closure


Comments