JS基础逻辑数学

逻辑练习之循环

【程序1】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

【斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34】

答题思路: 斐波那契数列,有已知的两位数,求出第三位
这里定义三个变量,分别表示第一个月的兔子数,第二个月的兔子数,第三个月的兔子变量。利用循环算出每个月的兔子数。
重点是:第三个月等于第一个月+第二个月数量。然后把第二个月的值给第一个月,第三个月的值给第二个月,再计算

<script>
		var first = 1,
            second =1,
            third;
        for(var i =1;i <= 12;i++){
            if(i >2){
                third = first + second;
                first = second;
                second =third;
                document.write('第'+i+'个月的兔子数是:'+third+'对<br/>');
            }
            else{
                document.write('第'+i+'个月的兔子数是:'+first+'对<br/>');
            }
        }
  </script>

【程序2】

题目:判断101-200之间有多少个素数,并输出所有素数。

<script>
    	var count = 0;
        for (var i = 101; i <= 200; i++) {
            for (var j = 2; j <= i; j++) {
                if (i % j == 0) {
                    break;
                }
                else {
                    if (j + 1 == i) {
                        count++;
                        document.write(i + '<br/>')
                    }
                }
            }
        }
        document.write('101到200之间共有:' + count + '个质数');
</script>

【程序3】

题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

<script>
        var str = '';
        for(var i = 100;i < 1000;i++){
            var hundred = parseInt(i / 100);   //取百位
            var decade = parseInt(i / 10 % 10) //十位
            var theUnit = parseInt(i % 10);   //个位
            if(i == (hundred * hundred *hundred)+(decade * decade * decade)+(theUnit * theUnit *theUnit)){
                str += i+'、';
            }
        }
        str = str.substr(0,str.length-1);   //截掉最后一个 、
        document.write('100到1000的水仙花是有:'+str);
</script>

【程序4】

题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。

<script>
	var num = +window.prompt('※请输入一个数为你算出它的分解质因数※');
    var str = num + '的分解质因数是:';
    var m = 1;
    for(var i = 1;i <= num; i++){
        while(num % i ==0){
            m = i;
            num = num / i;
            i = 2;
            str +=m+'*';
        }
    }
    str = str.substring(0,str.length-1);
    document.write(str);
</script>

【程序5】

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

<script>
        var first = +window.prompt('输入数字1');
        var second = +window.prompt('输入数字2');
        var a = first > second?second:first;
        for(var i = a;i >= 0;i--){
            if(first % i == 0 && second % i == 0){
                var b = i;
                break;
            }
        }
        if( first <= 1){
            document.write('最大公约数是'+second);
            document.write('最小公倍数是'+first );
        }
        else{
            document.write('最大公约数是:'+b);
            document.write('最小公倍数是'+(first * second / b));
        }
    </script>

【程序6】

题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

<script>
	var num = +window.prompt('请输入要累加的数字');
        var n = +window.prompt('请输入要累加的次数');
        var count = 0;
        var sum = 0;
        var str = '';
        for(var i = 0;i < n;i++){
            count += num * Math.pow(10,i);
            sum += count;
            str += count+'+';
        }
       str = str.substring(0,str.length-1);
        document.write(str+'='+sum);
</script>

【程序7】

题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。

<script>
	var count = '';
        for(var i = 1;i <1000;i++){
            var sum= 0;
            for(var j = 1;j <= i / 2;j++){
                if(i % j == 0){
                    sum += j;
                }
            }
            if(sum == i){
                count += i+'、';
            }
        }
        count = count.substring(0,count.length-1);
        document.write('一千以内的完数为:'+count +'<br>');
</script>

【程序8】

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

 <script >
        var str = '1-2-3-4可以组成';
        var count = 0;
        for(var i = 1;i <= 4;i++){
            for(var j = 1;j <= 4;j++){
                for(var k = 1;k <= 4;k++){
                    if(i != j && i != k && j != k){
                        count++;
                        str += '<br/>'+i+j+k;
                    }
                }
            }
        }
        document.write(str);
        document.write('<br/>一共可以组成'+count+'个不相同的三位数!');
    </script>

【程序9】

题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

<script>
	var price = +window.prompt('请输入当月利润(万元)');
        var sum = 0;
        if(price <= 10){
            sum = price * 0.1;
        }
        else if(price <= 20){
            sum = 1 + price*0.075;
        }
        else if(price <= 40){
            sum = 1.75 + price*0.05;
        }
        else if(price <= 60){
            sum =price*0.03;
        }
        else if(price <= 100){
            sum = price*0.015;
        }
        else{
            sum = price*0.01;
        }
        document.write('销售提成是:'+sum+'万元');
</script>

【程序10】

打印菱形
(有点问题,有兴趣的可以研究一下)

<script>
        for(var i = 0;i < 5;i++){
            for(var k = 5;k >=i;k--){
                document.write(' &nbsp;');
            }
            for(var j = 1;j < i * 3-1;j++){
                document.write('*');
            }
            document.write('<br/>')
        }
        for(var i = 5;i >= 0 ;i--){
            for(var k = 5;k >=i;k--){
                document.write(' &nbsp;');
            }
            for(var j = 1;j < i * 3-1;j++){
                document.write('*');
            }
            document.write('<br/>')
        }
    </script>

【程序11】
【程序5】
题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

<script>
//三目元算符
        var sum = +window.prompt('请输入分数:');
        var s = sum >= 90?'A':
                sum >= 60?'B':
                sum > 0?'C':'请输入正确的分数';
        document.write(s);

 //if判断
        var sum = +window.prompt('请输入分数:');
        var s = '';
        if(sum >= 90){
            s ='A';
        }else if(sum >= 60){
            s = 'B';
        }
        else if(sum <60 && sum >0){
            s = 'C';
        }
        else{
            s = '请输入正确的分数';
        }
        document.write(s);

</script>

【程序12】

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

<script>
 	var height = 100;
        var s = 100;
        for(var i = 0;i < 10;i++){
            s += height;
            height /= 2;
        }
        document.write('经过路程是:'+s+'米<br/>');
</script>
发布了17 篇原创文章 · 获赞 3 · 访问量 665

猜你喜欢

转载自blog.csdn.net/weixin_42207353/article/details/103832810