一些入門的編程題(JS實現)

1. 在頁面上輸出100到1000之間既是3的倍數又是5的倍數的數字。
2. 雞兔同籠:雞和兔子一共35只,籠子裏一共有94只腳,用程序計算出雞和兔子分別多少隻
3. 計算兩個數的最大公約數和最小公倍數。
4. 求1!+2!+3!+...+10!的和。
5. 對一個整數分解質因數。例如: 90 = 2 * 3 * 3 * 5
6. 在頁面中顯示出所有的"水仙花數",所謂"水仙花數"是指一個三位數, 其各位數字立方和等於該數本身。
7. 一個數如果恰好等於它的因子之和,這個數就稱爲 "完數 "。 例如6=1+2+3.編程 找出1000以內的所有完數。

1.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>既是3的倍數也是5的倍數</title>
    <style>
        p{
            font:bold 16px  "微軟雅黑";
            color:red;
        }
        span{
            display: inline-block;
            width: 50px;

        }
    </style>
</head>
<body>
<script>
    // 題目:在頁面上輸出100到1000之間既是3的倍數又是5的倍數的數字。
    var min=100;
    var max=1000;
    //count變量作爲累加器
    var count=0;
    document.write("<p>"+min+"到"+max+"之間的數既是3的倍數也是5的倍數有:"+"</p>");
    for(i=min;i<=max;i++){
        //判斷既是3的倍數又是5的倍數的i
        if(i%3==0 && i%5==0){
            document.write("<span>"+i+"</span>");
            count++;
            if(count%5==0){
                document.write("<br>");
                count=0;
            }
        }
    }
</script>
</body>
</html>


2.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>雞兔同籠</title>
    <style>
        p{
            font:bold 16px "微軟雅黑";
            color:red;
        }
    </style>
</head>
<body>
<!--題目:雞兔同籠:雞和兔子一共35只,籠子裏一共有94只腳,用程序計算出雞和兔子分別多少隻-->
<script>
    //兔子和雞數量一共有amount
    var amount=35;
    //兔子和雞腳支有foot
    var foot=94;
    document.write("<p>"+"雞兔同籠:一共35只,94支腳"+"</p>");
    //i設爲是兔子的數量
    for(var i=0;i<=amount;i++){
        if(i*4+(amount-i)*2==foot){
            document.write("滿足以上條件有以下方案:"+"兔子數量:"+i+" 雞的數量:"+(amount-i));
        }
    }

</script>
</body>
</html>


3.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>求兩數的最大公約數和最小公倍數</title>
</head>
<body>
<!--題目:計算兩個數的最大公約數和最小公倍數-->
<script>
    var num1=+prompt("輸入第一個數:");
    var num2=+prompt("輸入第二個數:");
    //判斷兩個數的大小
    //變量:divident放大數,divisor放小數,remainder放餘數;
    if(num1>num2){
        divident=num1;
        divisor=num2;
    }else{
        divident=num2;
        divisor=num1;
    }
    //進行計算最大公約數
    //基本思想就是輾轉相除法(大數除以小數,小數除以上一步的餘數,知道餘數爲0)
    while(divident%divisor != 0){
        remainder=divident%divisor;
        divident=divisor;
        divisor=remainder;
    }
    //變量:gcd最大公約數;lcm最大公倍數;
    //求出了最大公約數,那麼最大公約數基本思想就是:兩數的成績除以最大公約數。
    var gcd=divisor;
    var lcm=num1*num2/gcd;

    //輸出頁面
    document.write("您輸入的兩數爲:"+num1 +" "+num2+"<br>");
    document.write("兩數最大公約數爲: "+gcd+"<br>");
    document.write("兩數最小公倍數爲: "+lcm+"<br>");
</script>
</body>
</html>

3.另解:思想算法簡單一點,但算法時間複雜度不夠優化

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>簡單算法的最大公約數和最小公倍數</title>
</head>
<body>
<script>
    var m=5;
    var n=12;
    var min=m<n ? m:n;
    for(var i=min;i>0;i--){
        if(m%i==0 && n%i==0){
            console.log(m+"與"+n+"的最大公約數:"+i);
            break;
        }
    }

    var max=m>n? m:n;
    for(var i=max;i>1;i++ ){
        if(i%m==0 && i%n==0){
            console.log(m+"與"+n+"的最小公倍數:"+i);
            break;
        }
    }
</script>
</body>
</html>


4.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>階乘相加</title>
</head>
<body>
<script>
    //題目:求1!+2!+3!+...+10!的和
    var sum=0;
        for(var i=1 ;i<=10;i++){
            //重中之重是mul變量的position
            var mul=1;
            for(var j=1;j<=i;j++){
                mul*=j;
            }
                sum+=mul;
    }
    document.write(sum);
</script>
</body>
</html>


5.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>對一個分解因式整數</title>
    <style>
        span,p{
            font:bold 16px "fantasy";
            color:red;
        }
    </style>
</head>
<body>


 <!--* 題目:對一個整數分解質因數。例如: 90 = 2 * 3 * 3 * 5-->
 <!--* 概念分析:分解質因數只針對合數。每個合數都可以寫成幾個質數相乘的形式。
       程式分析:如果是質數,分解質因數就是其本身。
        這裏我對2單獨考慮,2既不是屬於合數也不是屬於質數。所以我對用戶輸入值要求大於2的數。(用if··else語句實現)
        求一個數分解質因數,要從最小的質數除起(那麼就不用prime的函數調用方法)
        設置一個for循環,把他所有質數可能值遍歷一遍。這種算法較爲高效。
        一直除到結果爲質數爲止。
  -->

<script>
    var input=+prompt("請輸入您需要分解因數的數字:");
    document.write("<span>您輸入的數字:</span>"+input+"<p> 計算機分解因式結果爲:</p>");
    //textNum變量至關重要,如果沒有他,比如5  只會輸出5=5;不太好看。所以,設置一個變量testNum,
    //只要看testNum就知道他是否本身就是質數啦
    var testNum=input;
    var n=input;
    if(n<2)
    {
        document.write("Warning!請輸入大於2的數!");
    }else {
        document.write(n + "=");

        for (var i = 2; i <= Math.sqrt(n); i++)        //這裏時間複雜度爲O(根號n),大大降低數量級。
        {

            while (n % i == 0) {
                n = n / i;
                document.write(i + " ");
                if (n != 1) {
                    document.write("*");
                }
            }
        }
        //prime質數出口
        if(n==testNum){
            document.write("1* "+n);
        }
        if (n!=1 && n!=testNum) {
            document.write(n);
        }
    }
</script>
</body>
</html>

5.另解:容易理解點的算法思想,但不優化代碼

<script>

//5. 對一個整數分解質因數。例如: 900 = 2 * 2 *
//num只是測試數據
var num = 900;
var temp = num;
var msg = num + " = ";
for (var i = 2; i <= temp; i++){
    if (temp % i == 0){
        if (i == temp){ // 最後一次的時候不要再添加 * 號
            msg += i;
        }else{
            msg += i + " * ";
        }
        temp = temp / i;
        i--;
    }
}
console.log(msg);

</script>

6.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>水仙花</title>
</head>
<body>
<style>
    h3{
        color:red;
    }
</style>
<script>
    //在頁面中顯示出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。
    //此題主要是考察兩個知識點
    //求三位數的各個位數字
    //求立方項,用函數寫法時間複雜度會降低一個數量級O(n);
    document.write("<h3>三位數的水仙花數有:</h3>");
    function cube(x){
        return x*x*x;
    }
    for(var num=100;num<=999;num++){
        var unit=num%10;
        var decade=parseInt((num%100)/10);
        var hundred=parseInt (num/100);
        var outUnit=cube(unit);
        var outDecade=cube(decade);
        var outHundred=cube(hundred);
        if(outUnit+outDecade+outHundred == num){
            document.write(num+"<br>");
        }
    }

</script>
</body>
</html>


7.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>1000以內的所有完數</title>
    <style>
        h3{
            color: red;
        }
    </style>
</head>
<body>
<!--題目:一個數如果恰好等於它的因子之和,這個數就稱爲 "完數 "。
          例如6=1+2+3.編程 找出1000以內的所有完數。-->
<script>
    document.write("<h3>1000以內的所有完數:</h3>");
    //count累加器,作爲換行計數器
    var count;
    //外層for循環是遍歷1--1000數字的作用,變量i就是各個數
    for(var i=1;i<1000;i++){
        //Position of variate is important!!!
        var sum=0;
        //內層for循環是找出其數的所有因子,變量j就是各個因子
        for(var j=1;j<i;j++){
            if(i%j==0){
                sum+=j;
            }
        }
        //判斷因子和是否等於其本身number值,若是則是完數並輸出。
        if(sum==i){
            document.write(i+" &nbsp;");
            //以下代碼是用來5個換行,但沒用到,因爲1000內數只有三個是完數。
            count++;
            if(count%5 == 0){
                document.write("<br>");
                count=0;
            }
        }

    }
</script>
</body>
</html>
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章