• CSDN竞赛第五期竞赛-习题解析


    CSDN竞赛第五期竞赛题目:

    1、题目名称:寻因找祖

    寻找因子个数为n的最小整数x。

    思路:从1开始循环,统计每个数字的因数之和

    function getFactor(n) {
       var x = 1;
       var status = true;
       //选择do while,不满足条件,一直循环下去,知道寻找到最终结果,跳出循环
       do {
           var j = 0;
           for (var i = 1; i <= x; i++) {
           	   //统计因数之和
               if (x % i == 0) {
                   j++;
               }
           }
           if (j == n) {
           	   //跳出循环
               status = false;
           } else {
               //继续循环
               x++;
           }
       } while (status);
       return x;
    }
    var number = 10;
    console.log('因子个数为'+number+'的最小整数x:' + getFactor(number));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    2、题目名称:通货膨胀-x国货币

    X国发行货币最高面额为n。 次高面额为n的因子。 以此类推。 X国最多发行多少种货币。

    思路:找到n的全部因数,统计求和

    function getMoney(n) {
       var m = 0;
        for (var i = 1; i < n; i++) {
            if (n % i == 0) {
                m++;
            }
        }
        return m;
    }
    
    var money = 1000;
    console.log('X国发行货币最高面额为' + money + '。 次高面额为n的因子,X国最多发行' + (parseInt(getMoney(money)) + 1) + "种货币");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3、题目名称:莫名其妙的键盘

    有一个神奇的键盘,你可以用它输入a到z的字符,然而每当你输入一个元音字母(a,e,i,o,u其中之一)的时候,已输入的字
    符串会发生一次反转! 比方说,当前输入了tw,此时再输入一个o,此时屏幕上的字符串two会反转成owt。 现给出一个
    字符串,若用该键盘输入,有多少种方法可以得到?

    几道题中最有意思的一道题

    结果:

    1、字符串无元音,1种方法

    按照顺序输出

    2、字符串有元音,开头不是元音,无方法
    3、字符串有元音,开头是元音,结尾不是元音,1种方法,

    输出顺序根据元音个数而定
    如果为奇数个元音,从中间元音开始,向右依次输出,碰见元音,折返向左倒叙输出,循环反复,得到初始值
    如果为偶数个元音,从中间较大的元音开始,向左倒叙输出,碰见元音,折返向右依次输出,循环反复,得到初始值
    在这里插入图片描述

    4、字符串有元音,开头是元音,结尾是元音,1种方法

    将字符串去掉第一个元音,反转,变成一个以元音开头,结尾不是元音的字符串
    根据3方法计算出字符串,然后加上去掉的元音,即可得初始字符串

    //第三步得获取原始字符串方法
    console.log(getStr('abcdefghijklmnopqrstuvwxyz'));
    //输入字符串为:ijklmnohgfepqrstudcbavwxyz
    function getStr(str) {
        var vowel = ['a', 'e', 'i', 'o', 'u'];
        //判断首字母是否是元音
        if (vowel.indexOf(str[0]) >= 0) {
            //判断尾字母是否是元音
            if (vowel.indexOf(str[str.length - 1]) < 0) {
                var arr = str.split('');
                var vowel_arr = [];
                //获取所有元音在字符串中的key
                for (var i = 0; i < arr.length; i++) {
                    if (vowel.indexOf(arr[i]) >= 0) {
                        vowel_arr.push(i);
                    }
                }
                //偶数元音-奇数元音
                if (vowel_arr.length % 2 == 0) {
                    //计算中间元音,作为初始字符串开始字符
                    var begin_num = vowel_arr.length / 2;
                    //定义初始字符串首字母
                    var begin_str = arr[vowel_arr[begin_num]];
                    vowel_arr.push(arr.length - 1);
                    //先向左倒叙,向右正序,循环往复
                    for (var j = 1; j <= begin_num; j++) {
                        for (var k = vowel_arr[begin_num - j + 1] - 1; k >= vowel_arr[begin_num - j]; k--) {
                            begin_str += arr[k];
                        }
                        for (var k = vowel_arr[begin_num + j - 1] + 1; k <= vowel_arr[begin_num + j]; k++) {
                            begin_str += arr[k];
                        }
                    }
                } else {
                    //计算中间元音,作为初始字符串开始字符
                    var begin_num = (vowel_arr.length - 1) / 2;
                    //定义初始字符串首字母
                    var begin_str = arr[vowel_arr[begin_num]];
                    vowel_arr.push(arr.length - 1);
                    //先向右正序,向左倒叙,循环往复
                    for (var j = 1; j <= begin_num + 1; j++) {
                        for (var k = vowel_arr[begin_num + j - 1] + 1; k <= vowel_arr[begin_num + j]; k++) {
                            begin_str += arr[k];
                        }
                        for (var k = vowel_arr[begin_num - j + 1] - 1; k >= vowel_arr[begin_num - j]; k--) {
                            begin_str += arr[k];
                        }
                    }
                }
                return '输入字符串为:' + begin_str;
            }
        }
        return '无法输出';
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    4、题目名称:三而竭

    一鼓作气再而衰三而竭。 小艺总是喜欢把任务分开做。 小艺接到一个任务,任务的总任务量是n。 第一天小艺能完成x份任务。 第二天能完成x/k。 。。。 第t天能完成x/(k^(t-1))。 小艺想知道自己第一天至少完成多少才能完成最后的任务。(该题的测试用例为:n=59,k=9 输出 x=54)

    思路:t天,每天工作的的任务加起来大于总任务量,t-1天,所有任务加起来小于总任务量(x+x/k+x/k2 +x/k3+…>=n)
    都说等比数列,我不会,直接循环走起,便利x,带入求和,大于总任务数
    要求:每天工作为整数

  • 相关阅读:
    网络教学管理系统
    .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
    pdf.js不分页渲染(渲染完整内容)
    大数据学习:进程管理(2)
    一、Linux入门:购买服务器,与服务器建立连接
    C++ 构造函数
    Vue packages version mismatch: vue@xxx vue-server-renderer@xxx
    dubbo-admin 无法显示元数据
    你了解供应链云仓系统源码里的5个核心功能吗?
    判断质数问题以及判断日期是一年第几天问题分析
  • 原文地址:https://blog.csdn.net/G925010178/article/details/126833340