使用JS解决一些简单的算法问题

第一题:

小蓝每天都锻炼身体。正常情况下,小蓝每天跑 1千米。
如果某天是周一或者月初(1日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。小蓝跑步已经坚持了很长时间,从 2000年 1 月 1 日周六(含)到 2020 年 10 月 1 日周四(含)
请问这段时间小蓝总共跑步多少千米?

let sum = 0
let w = 6
let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
// 第一层遍历年
for (let year = 2000; year <= 2020; year++) {
    // 第二层遍历月
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
        days[1] = 29
    } else {
        days[1] = 28
    }
    for (let month = 0; month <= 11; month++) {
        // 第三层遍历日
        for (let date = 1; date <= days[month]; date++) {
            if (date == 1 || w == 1) {
                sum += 2
            } else {
                sum += 1
            }
            w = (w + 1) % 7
            if (year == 2020 && month == 9 && date == 1) {
                console.log('第1题', sum)
                break
            }
        }
    }
}

第二题:

请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?

var count = 0
    for (let i = 1; i <= 2020; i++) {
        i = i + ''
        for (let j = 0; j < i.length; j++) {
            if ('2' == i[j]) {
                count++;
            }
        }
    }
    console.log('第2题', count);

第三题:
小明对数位中含有2、0、1、9的数字很感兴趣(不包括前导0),在1到
40 中这样的数包括 1、2、9、10 至32、39 和40,共28 个,他们的和是 574。
请问,在1到n中,所有这样的数的和是多少?

 

var total = 0
    for (let i = 1; i <= 40; i++) {
        i = i + ''
        for (let j = 0; j < i.length; j++) {
            if ('2' == i[j] || '9' == i[j] || '0' == i[j] || '1' == i[j]) {
                total += Number(i)
                break;
            }
        }
    }
    console.log('第3题', total);

第四题:

猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个
以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。

var peach = 1
for (let i = 0; i < 9; i++) {
    peach = (peach + 1) * 2
}
console.log('第4题', peach)

 第五题:

一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?

var height = 100
var heightTotal = 0
for (let i = 0; i < 10; i++) {
    heightTotal += height * 2
    height = height / 2
}
console.log('第5题', heightTotal - 100, height);

第六题:

判断一个数是否是回文数 如:121 1221 12321。

// 使用字符串的方式
let str = prompt("要判断的数是:")
    let newStr = ''
    for (let i = str.length-1; i >=0 ; i--) {
        newStr += str[i] 
    }
    if(newStr==str){
        alert('true') 
    }else{
        alert('false')
    }
// 使用数字的方式
let num = +prompt("请输入你要判断的数:");
let reverseNum = 0;                     // 存储num的反转数字
while (reverseNum < num) {
    // 不断地将num的个位数添加到reverseNum的末尾,并将num除以10以去掉其个位数
    reverseNum = num % 10 + reverseNum * 10
    num = parseInt(num / 10)
}
// 原数是奇数长度 使用 parseInt(reverseNum / 10) == num 进行判断
console.log('回文数', num == reverseNum || parseInt(reverseNum / 10) == num);

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值