js-worlk 算法练习题

151 阅读2分钟

1. 用户输入一个数字n,计算3/2+4/3+5/4+......+(n+1)/n。

function sumNumber(number){
    var num = 0
    for(var i = 2; i<=number;i++){
        num += (i+1)/i
    }
    return num
}
console.log(sumNumber(prompt('')))

2. 用户输入一个数字,在控制台中列出它的所有约数。

function yueNumber(number){
    for(var i = 1;i<=number;i++){
        if(number % i == 0){
            console.log(i)
        }
    }
}
yueNumber(prompt())

3. 小游戏1

大家从小到大,都玩儿过的一个庸俗的游戏:游戏玩儿法就是,大家轮流报数,如果报到能被7整除的数字, 或者尾数是7的数字,都算踩地雷了。就应该罚唱歌。请在控制台输出1~60之间的所有“安全数”。比如:1、2、3、4、5、6、8、9、10、11、12、13、15、16、18、19、20、22、23、24、25、26、29、30

for(var i=1;i<=60;i++){
    if(!(i % 7 == 0 || (i%10) == 7)){
        console.log(i);
    }
}

4. 求水仙花数

水仙花数是一种特殊的三位数,它的特点就是,每个数位的立方和,等于它本身。比如153就是水仙花数。 因为:1^3+5^3+3^3 = 153。那么100~999之内,只有4个水仙花数,请编程找出来。

for (var i = 100; i <= 999; i++) {
    var gw = i % 10;
    var sw = parseInt(i / 10) % 10;
    var bw = parseInt(i / 100);
    if (i == Math.pow(gw, 3) + Math.pow(sw, 3) + Math.pow(bw, 3)) {
        console.log(i);
    }
}

5. 求完美数

如果一个数恰好等于它的因数之和,则称该数为“完美数”。
例如:第1个完全数是6,它有因数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。 第2个完全数是28,它有因数1、2、4、7、14、28,除去它本身28外,其余5个数相加, 1+2+4+7+14=28。试寻找1~10000之间的所有完美数。

// 方法一
for (var i = 1; i <= 10000; i++) {
    var sum = 0;
    for (var j = 0; j < i; j++) {
        if (i % j == 0) {
            sum += j;
        }
    }
    if (sum == i) {
        console.log(i);
    }
}
// 方法二
function getNumber() {
    for (var i = 1; i <= 10000; i++) {
        var sum = 0;
        for (var item of getNumberArray(i)) {
            sum += item
        }
        sum == i && console.log(i + '是一个完美数') 
    }

}
// 方法三
function getNumberArray() {
    var array = []
    for (var b = 1; b < number; b++) {
        if (number % b == 0) {
            array.push(b)
        }
    }
    return array;
}
getNumber()

6. 用户输入一个数字,判断这个数字是否是质数

var num = prompt();
function getNum(num) {
    if (num == 0 || num == 1) {
        return num + '不是质数';
    }
    for (var i = 2; i < num; i++) {
        if (num % i == 0) {
            return num + '不是质数';
        }
    }
    return num + '是质数';
}
alert(getNum(num));

7. 苹果3元一个,鸭梨2元一个,桃子1元一个。现在想用200元买100个水果,在控制台中列出所有可能性。

var apple = 3
var pear = 2
var peach = 1

var num = 0
for(var i = 0;i<=66;i++){
    for(var j = 0;j<=100;j++){
        for(var k = 0;k<=100;k++){
            if((i+j+k)== 100 && (i*apple)+(j*pear)+(k*peach)<=200){
                console.log(i,j,k)
            }
        }
    }
}

8. 求1! + 2! + 3! + 4! + …… + 10!的和,叹号表示阶乘,如4! = 1 * 2 * 3 * 4

var num = 1
var temp = 0
for(var i=1;i<=10;i++){
    num*=i 
    temp+=num
}
console.log(temp)

9.求一个三位数,该三位数等与其每位数字的阶乘之和

// 第一种
for(var n = 145;n<1000;n++){

    var a = parseInt(n / 100) 
    var b = parseInt((n /10) % 10)
    var c = parseInt(n % 10)

    if(n == (fun(a) + fun(b) + fun(c))){
        console.log(n)
    }
}
// 第二种
function fun(i){
    var n = 1;
    var s = 1;

    while ( n <= i ) {
        s *= n;
        n += 1;
    }

    return s;
}

10.编写一个函数rev用于将一个整数前后倒置。

例如rev(12345)将返回54321,rev(123)将返回321,整数位数不限制,多少位都行。

// 第一种
    function funStr(number){
        var str = ''
        while(number){
            str += number % 10
            number = parseInt(number / 10)

        }
         console.log(str /1)
        return str
    }
   funStr(12345)
// 第二种
function funStr(number) {
    var strArray = (number + '').split('').reverse()
    var str = ''
    for (var item of strArray) {
        str += item
    }
    console.log(str / 1)
}
funStr(1234567)
// 第三种
function funStr(number){
    number += ''
    for(var i = number.length - 1;i>=0;i--){

        console.log((number[i])/1)
    }
}
funStr(12345)

11. 如果整数A 的全部约数(包括1,不包括A 本身)之和等于B,且整数B 的全部约数(包括1,不包括B 本身)之和等于A,则称整数A和B是一对亲密数。求3000 以内的全部亲密数。

// 第一种
function sum(num) {
    var sum = 0;
    for (var i = 1; i < num; i++) {
        if (num % i == 0) {
            sum += i;
        }
    }
    return sum;
}
// 第二种
for (var i = 1; i < 3000; i++) {
    //拿到i的约数和
    var b = sum(i);
    //判断b的约数和与i 是否相等 且 i和b不相等
    if (sum(b) == i && i != b) {
        console.log(i + '和' + b + '是一对亲密数');
    }
}

12.编写函数repeat(char,n) 实现重复char字符串n次,比如repeat("★",6) 返回"★★★★★★"

// 第一种
 function repeat(char,n){
     var array = []
     for(var i = 0;i<n;i++){
        array.push(char)
     }
    return array.join('');

 }
 repeat(prompt('请输入重复的字符串'),prompt('请输入要重复的次数'))
//第二种
 function repeat(char, n) {
     // var str = '';
     var array = []
     for (var i = 0; i < n; i++) {
         // str += char;
         array.push(char)

     }
     console.log(array.join(''))

 }
 repeat(1,6)

13.打印等腰三角形

              *
             ***
            *****
           *******
          *********
function print(){
    var n = prompt('请输入三角形的层数');
    for(var i = 0; i < n; i++){
        console.log(" ".repeat(n-i-1)+"*".repeat(i*2+1))
        // console.log(repeat(" ",n-i-1)+repeat("*",i*2+1))
    }
  }
  print()

14.编写函数rev(char) 实现将字符串char倒置,比如rev("spring") 返回"gnirps"

function rev(char){
    var array = char.split('').reverse().join('')
    console.log(array);
}
rev('spring')

15.将字符串"i come from beijing"倒置,即控制台输出"beijing from come i",语句直接写在程序中,不需要用户输入

//第一种
function comeFrom(){
    var str = 'i come from beijing'
    var array = str.split(' ').reverse().join(' ')
    console.log(array)
}
comeFrom()
//第二种
function comeForm(){
    var char = 'i come from beijing';
    var charArray = char.split(' ');
    var newArray = [];
    var i = charArray.length - 1;
    for(var item of charArray){
        // newArray.unshift(item)
        newArray[i] = item;
        i--;
    }
    console.log(newArray.join(' '))
}
comeForm()

16.编写函数rightchange(char,n) 实现字符串char循环右移n位。比如rightchange("abcdefg",2) 返回"fgabcde"

function rightchange(char,n){
    var newArray = [];
    var index = 0;
    if(n > char.length){
        throw new Error('您传入的参数n过长,请重新传入');
        return;
    }

    for(var i = 0; i < char.length; i++){
        // 0 1 2 3 4
        if(i <= char.length - 1 - n){
            newArray[i+n] = char[i]
        }else{
            newArray[index] = char[i];
            // newArray[char.length - 1 - i] = char[i];
            index++;
        }
    }
    console.log(newArray.join(''))
}
rightchange("abcdefg",2);

17.有10个学生的成绩存在数组中,请统计大于等于平均成绩的人数。成绩直接以数组形式写在程序中,不需要用户输入。

function countGrades(grades){
    var array = []
    var avgSum = 0
    for(var item of grades){
        // 平均分
        avgSum += item/grades.length
    }
    for(var item of grades){
        if(item >= avgSum){
            array.push(item)
        }
    }
    console.log('平均数是:'+avgSum)
    console.log('大于等于平均成绩有:',array)
}
countGrades([5,20,30,40,55,60,70,80,90,100])

18.勾股定理:直角三角形中,两个直角边的平方和,等于斜边平方和。寻找三边的长度都不大于100,并且三边边长都是整数的可能,在控制台输出。

function triangleTheorem(a){
    for(var i = 1;i<=a;i++){
        for(var j = i;j<=a;j++){
            for(var k = j;k<=a;k++){
                if((i**2) + (j**2) == (k**2) && (i+j) >= k){
                    console.log(i,j,k)
                }
            }
        }
    }
}
triangleTheorem(100)

19.编写函数maxsame(char1,char2) 返回字符串char1和char2的最大相同子串,比如maxsame("abcdefghijklmn","mndefghlm") 返回"defgh"。

function maxSame(str1,str2){
    var newStr = '';
    var newStrLength = 0;
    for(var i = 0; i < str1.length; i++){
        for(var j = i+1; j < str1.length; j++){
            var substr = str1.substring(i,j+1);
            if(str2.indexOf(substr) != -1 && substr.length > newStrLength){
                newStr = substr;
                newStrLength = substr.length;
            }
        }
    }
    return newStr
}
console.log(maxSame('abcdefghijklmn','mndefghlm'))

20.将"i love javascript cai guai"的每个单词的第一个字母,变为大写。

function conversionBig(string){
    var str =''
    var array1 = []
    var array = string.split(' ')
    for(var item of array){
        var array = item.replace(item[0],item[0].toUpperCase())
        //第一种
        // array1.push(array)
        // 第二种
        str += array + ' '
    }
    // 第一种
    // console.log(array1.join(' '))
    // 第二种
    console.log(str);

}
conversionBig('')

// 第三种
function conversionBig(string){
    array = string.split(' ')
    for(var i = 0;i<array.length;i++){
        array[i] = array[i].replace(array[i][0],array[i][0].toUpperCase())
    }
    console.log(array.join(' ')) 
}
conversionBig('i love javascript cai guai')