前端算法练习---循环控制

说明:

题目来源于牛客题霸

代码是在javascript node ACM模式下写的

一、奇偶统计

描述

任意输入一个正整数N,统计1~N之间奇数的个数和偶数的个数,并输出。

输入描述:

一行,一个正整数N。(1≤N≤100,000)

输出描述:

一行,1~N之间奇数的个数和偶数的个数,用空格分开。

javascript 复制代码
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(' ');
        let a = parseInt(tokens[0]);
        var odd=0;//奇数
        var even=0;//偶数
        for(var i=1;i<a+1;i++){
            if(i%2==0){
                odd+=1;
            }
            else{
                even+=1;
            }
        }
        console.log(even,odd);
        // console.log(even);
    }
}()

二、牛牛学数列2

描述

这次牛牛又换了个数列,他想计算:1+1/2+1/3+...+1/N的值。(保留6位小数)

输入描述:

输入一个整数,范围在0到1000

输出描述:

输出一个浮点数

javascript 复制代码
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(' ');
        let a = parseInt(tokens[0]);
        var number=0;
        var sum=0;
        for(var i=1;i<a+1;i++) {
            number=1/i;
            sum+=number;
        }
        console.log(sum.toFixed(6));
    }
}()

三、数位之和

描述

求一个整数的所有数位之和

输入描述:

输入一行,包含一个整数。

输出描述:

一个整数. int范围内

javascript 复制代码
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(' ');
        let a = parseInt(tokens[0]);
        var number=0;
        var sum=0;
        while(a!=0) {
            number=a%10;
            sum+=number;

            a=Math.floor(a/10);
        }
        console.log(sum);
    }
}()

四、水仙花数

描述

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: "水仙花数"是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 现在要求输出所有在m和n范围内的水仙花数。

输入描述:

输入数据有多组,每组占一行,包括两个整数m和n(100 ≤ m ≤ n ≤ 999)。

输出描述:

对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开; 如果给定的范围内不存在水仙花数,则输出no; 每个测试实例的输出占一行。

javascript 复制代码
// 单行输入
var readline = require('readline');

rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.on('line', function(data) {
    // 获取输入
    var inputs = data;

    // 处理
    var result = deal(inputs);

    // 输出结果
    console.log(result);
});


function deal(inputs) {
    var array = inputs.split(' ');
    var min = parseInt(array[0]);
    var max = parseInt(array[1]);
    var str = '';
    var flag = false;
    for(var i=min;i<=max;i++){
        var strArr = (""+i).split("");
        var num = 0;
        var g = parseInt(strArr[2]);
        var s = parseInt(strArr[1]);
        var b = parseInt(strArr[0]);
        num = g*g*g + s*s*s + b*b*b;
        if(num == i){
            flag = true;
            // console.log(i);
            if(str == ''){
                str += i;
            }else{
                str += ' '+i;
            }
        }
    }
    if(flag == true){
        return str;
    }else{
        return 'no';
    }
    
}

五、变种水仙花

描述

变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。

例如:

655 = 6 * 55 + 65 * 5

1461 = 1*461 + 14*61 + 146*1

求出 5位数中的所有 Lily Number。

输入描述:

javascript 复制代码
for (let i = 10000; i < 100000; i++) {
  //五位数可以拆解成 1和4 2和3 3和2 4和1,即需要8个数组来存储它们
  let num1 = parseInt(i / 10000)
  let num2 = i - 10000 * num1
  let num3 = parseInt(i / 1000)
  let num4 = i - 1000 * num3
  let num5 = parseInt(i / 100)
  let num6 = i - 100 * num5
  let num7 = parseInt(i / 10)
  let num8 = i % 10
  if (i == num1 * num2 + num3 * num4 + num5 * num6 + num7 * num8) {
    process.stdout.write(i + ' ')
  }
}
for (let i = 10000; i < 100000; i++) {
  //五位数可以拆解成 1和4 2和3 3和2 4和1,即需要8个数组来存储它们
  let num1 = parseInt(i / 10000)
  let num2 = i - 10000 * num1
  let num3 = parseInt(i / 1000)
  let num4 = i - 1000 * num3
  let num5 = parseInt(i / 100)
  let num6 = i - 100 * num5
  let num7 = parseInt(i / 10)
  let num8 = i % 10
  if (i == num1 * num2 + num3 * num4 + num5 * num6 + num7 * num8) {
    process.stdout.write(i + ' ')
  }
}

六、反向输出一个四位数

描述

将一个四位数,反向输出。

输入描述:

一行,输入一个整数n(1000 <= n <= 9999)。

输出描述:

针对每组输入,反向输出对应位数。

javascript 复制代码
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 arr = line.split('').reverse().join('')
    console.log(arr)
    }
}()

七、回文对称数

描述

今天牛牛学到了回文串,他想在数字里面找回文,即回文数,回文数是正着读与倒着读都一样的数,比如1221,343是回文数,433不是回文数。请输出不超过n的回文数。

输入描述:

输入一个整数n(1 <= n <= 100000)

输出描述:

从1开始按从小到大的顺序输出所有回文数

javascript 复制代码
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 n = parseInt(line);
        for (let i = 1; i <= n; i++) {  //如4321 --> 1234
            let x = 0;
            let z = i;
            while (z != 0) {
                x = x * 10 + (z % 10);
                z = parseInt(z / 10);
            }
            if (x == i) {
                console.log(i);
            }
        }
    }
}()

八、菱形图案

描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用"*"组成的菱形图案。

输入描述:

多组输入,一个整数(2~20)。

输出描述:

针对每行输入,输出用"*"组成的菱形,每个"*"后面有一个空格。

javascript 复制代码
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()){
       line = Number(line);
        console.log(
            Array.from({ length: 2 * line + 1 }, (value, index) => {
                return Array.from(
                    { length: index > line ? index + 1 : 2 * line + 1 - index },
                    (subValue, subIndex) => {
                        if (index > line) {
                            if (subIndex < index - line || subIndex > line) {
                                return '';
                            } else {
                                return '*';
                            }
                        } else {
                            if (subIndex < line - index || subIndex > line) {
                                return '';
                            } else {
                                return '*';
                            }
                        }
                    }
                ).join(' ');
            }).join('\n')
        );
    }
}()

九、数字三角形

描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用数字组成的数字三角形图案。

输入描述:

多组输入,一个整数(3~20),表示数字三角形边的长度,即数字的数量,也表示输出行数。

输出描述:

针对每行输入,输出用数字组成的对应长度的数字三角形,每个数字后面有一个空格。

javascript 复制代码
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(n = await readline()){

        n = n - 0;
        for(let i = 1 ; i <= n ; i++) {
            let str = '';
            for(let j = 1 ; j <= i ; j++) {
                str += j + ' ';
            }
            console.log(str);
        }
    }
}()
相关推荐
阿芯爱编程5 分钟前
前端最新面试题
前端·面试
天天扭码10 分钟前
一分钟吃透一道面试算法题——字母异位词分组(最优解)
前端·javascript·算法
网络安全研发随想12 分钟前
C语言核心结构+难点精讲+工程技巧
c语言·开发语言·算法
天天扭码22 分钟前
JavaScript 中字符串转字符数组的两种优雅方式
前端·javascript·代码规范
何遇er24 分钟前
在 AI 编程的热潮下对低代码的思考
前端·低代码·ai编程
何遇er27 分钟前
一句 Prompt 自动生成表单:我在低代码平台里是怎么接入生成式 AI 的
前端·低代码·ai编程
_一条咸鱼_29 分钟前
Vue 指令模块深度剖析:从基础应用到源码级解析(十二)
前端·javascript·面试
薯条不要番茄酱37 分钟前
【JavaEE初阶】多线程重点知识以及常考的面试题-多线程进阶(一)
java·前端·java-ee
李煜鑫1 小时前
关于视频的一些算法内容,不包含代码等
算法·音视频·语音识别
只会安静敲代码的 小周1 小时前
uniapp上传图片时(可选微信头像、相册、拍照)
前端·微信·uni-app