Javascript之條件、循環、函數、遞歸、數組、字符串、Date練習題

文章目錄

一、條件類

判斷三個數的大小,並從小到大排列

var num1 = +prompt("請輸入數字:");
var num2 = +prompt("請輸入數字:");
var num3 = +prompt("請輸入數字:");
if(num1 > num2 && num1 > num3){
	if(num2 > num3){
		alert(num3 + "," + num2 + "," + num1);
	}else{
		alert(num2 + "," + num3 + "," + num1);
	}
}else if(num2 > num1 && num2 > num3){
	if(num1 > num3){
		alert(num3 + "," + num1 + "," + num2);
	}else{
		alert(num1 + "," + num3 + "," + num2);
	}
}else{
	if(num1 > num2){
		alert(num2 + "," + num1 + "," + num3);
	}else{
		alert(num1 + "," + num2 + "," + num3);
	} 
}

判斷學生成績是否合格

var score = prompt("請輸入分數:");
switch(parseInt(score / 10)){
	case 10:
	case 9:
	case 8:
	case 7:
	case 6:
		console.log("及格啦");
		break;
	default:
		console.log("不及格");
}

輸入日期,判斷這個日期是這一年的第幾天

var date = prompt("請輸入8位數日期:");
var year = parseInt(date / 10000)
var month = parseInt(date / 100) % 100;
var day = date % 100;
var count = 0;
var february = 28;
switch(month - 1){
    case 12:
        count += 31;
    case 11:
        count += 30;
    case 10:
        count += 31;
    case 9:
        count += 30;
    case 8:
        count += 31;
    case 7:
        count += 31;
    case 6:
        count += 30;
    case 5:
        count += 31;
    case 4:
        count += 30;
    case 3:
        count += 31;
    case 2:
        if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
            count += 29;
        }else{
            count += 28;
        }
    case 1:
        count += 31;
        break
}
count += day;
alert("第" + count + "天");

二、循環類

打印1000-2000之間的閏年,每行打印4個

for(var i = 1000 , count = 0 ; i < 2001 ; i++){
    if(i % 4 === 0 && i % 100 !== 0 || i % 400 === 0){
        document.write(i + "&nbsp;");
        count++;
    }
    // count爲計數器
    if(count % 4 === 0){
        document.write("<br>")
    }
}

打印水仙花數

for(var i = 100 ; i < 1000 ; i++){
	var a = i % 10;	// 個位數字
	var b = parseInt(i / 10) % 10; // 十位數字
	var c = parseInt(i / 100); // 百位數字
	// i === Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3)
	// i === a ** 3 + b ** 3 + c ** 3
	if(i === a * a * a + b * b * b + c * c * c){
		document.write(i + "<br>");
	}
}

打印1-100之間所有的質數

for(var i = 2 ; i < 101 ; i++){
	var flag = true; //使用中間量 flag 記錄狀態
	for(var j = 2 ; j < i ; j++){  //代碼優化1: j < i 改爲 j <= Math.sqrt(i)
		if(i % j === 0){
			flag = false;
			break; //代碼優化2
		}
	}
	if(flag){
		console.log(i);
	}
} 

判斷某個數是否是質數

var num = prompt("請輸入一個大於1的數字:");
var flag = true; //使用中間量 flag 記錄狀態
for(var i = 2 ; i < num ; i++){
	if(num % i === 0){
		flag = false;
		break;
	}
}
if(flag){
	document.write(num + "是質數");
}else{
	document.write(num + "不是質數");
}

打印三角形

for(var i = 0 ; i < 10 ; i++){
	for(var j = 0 ; j < i + 1 ; j++){
		document.write("*&nbsp;");
	}
	document.write("<br>");
}

打印倒三角形

for(var i = 10 ; i > 0 ; i--){
    for(var j = 0 ; j < i ; j++){
        document.write("*&nbsp;");
    }
    document.write("<br>")
}

打印等腰三角形

for(var i = 0 ; i < 10 ; i++){
    for(var j = 0 ; j < i * 2 + 1 ; j++){
        document.write("*&nbsp;");
    }
    document.write("<br>")
}

打印菱形

for(var i = 0 ; i < 10 ; i++){
    for(var j = 0 ; j < i * 2 + 1 ; j++){
        document.write("*&nbsp;");
    }
    document.write("<br>")
}
for(var i = 8 ; i >= 0 ; i--){
    for(var j = 0 ; j < i * 2 + 1 ; j++){
        document.write("*&nbsp;");
    }
    document.write("<br>")
}

打印空心菱形

for(var i = 0 ; i < 10 ; i++){
    for(var j = 0 ; j < i * 2 + 1 ; j++){
        if(j === 0 || j === i * 2){
            document.write("*&nbsp;");
        }else{
            document.write("&nbsp;&nbsp;");
        }
    }
    document.write("<br>")
}
for(var i = 8 ; i >= 0 ; i--){
    for(var j = 0 ; j < i * 2 + 1 ; j++){
        if(j === 0 || j === i * 2){
            document.write("*&nbsp;");
        }else{
            document.write("&nbsp;&nbsp;");
        }
    }
    document.write("<br>")
}

打印99乘法表

for(var i = 1 ; i < 10 ; i++){
	for(var j = 1 ; j < i + 1 ; j++){
		document.write(j + "*" + i + "=" + j * i + "&nbsp;");
	}
	document.write("<br>");
} 

三、函數類

編寫函數,計算三個數字的大小,按從小到大的順序打印

function fun(a, b, c) {
    var temp;
    if(a > b){
        temp = a;
        a = b;
        b = temp;
    }
    if(a > c){
        temp = a;
        a = c;
        c = temp;
    }
    if(b > c){
        temp = b;
        b = c;
        c = temp;
    }
    console.log("從小到大的順序是" + a + "," + b + "," + c);
}
fun(11, -2, 5);

編寫函數,在頁面上打印一個N行M列的表格,表格內容填充0~100的隨機數字

function printForm(N, M){
    document.write("<table>")
    for(i = 0 ; i < N ; i++){
        document.write("<tr>")
        for(j = 0 ; j < M ; j++){
            document.write("<td>" + parseInt(Math.random() * 101) + "</td>")
        }
        document.write("</tr>")
    }
    document.write("</table>")
}
printForm(8, 5);

編寫函數,實現功能:foo(1)(2)(3)(4) 打印 24

function foo(a){
    return function(b){
        return function(c){
            return function(d){
                console.log(a * b * c * d);
            }
        }
    }
}
foo(1)(2)(3)(4);

編寫函數,實現點擊按鈕隨便改變頁面和按鈕背景顏色

<body id="body">
<button id="btn">變換背景顏色</button>

function setRandomColor(ele, color){
    var r = color === "red" ? 255 : parseInt(100 * Math.random());
    var g = color === "green" ? 255 : parseInt(100 * Math.random());
    var b = color === "blue" ? 255 : parseInt(100 * Math.random());
    random_color = "rgb(" + r + "," + g + "," + b + ")";
    ele.style.cssText = "background-color : " + random_color;
}
btn.onclick = function(){
    setRandomColor(body, "red");
    setRandomColor(btn, "green");
}

編寫函數,實現隨機點名

<button id="btn">隨機點名</button>

function getRandomName(){
    var random_index = parseInt(arguments.length * Math.random());
    return arguments[random_index];
}
btn.onclick = function(){
    var random_name = getRandomName("吳京", "吳奇隆", "吳彥祖", "吳亦凡", "吳孟達", "吳晨");
    console.log(random_name);
}

編寫函數,計算兩個數字的和差積商

function calculate(a, b, operator){
    switch(operator){
        case "+":
            return a + b;
        case "-":
            return a - b;
        case "*":
            return a * b;
        case "/":
            return a / b;
    }
}
console.log(calculate(10, 2, "/"));

編寫函數,判斷一個字符串的內容是不是純數字,返回true或false

function fun(a){
    return Number(a) || a === "0" ? true : false;
}

編寫函數,生成4位數字的驗證碼

function generateCode(){
    var code = "";
    for(var i = 0; i < 4; i++){
        code += parseInt(Math.random() * 10)
    }
    return code;
}
console.log(generateCode());

某個公司採用公用電話傳遞數據,數據是四位的整數,在傳遞過程中是加密的,加密規則如下:每位數字都加上5,然後用除以10的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換,請編寫一個函數,傳入原文,輸出密文

function generatePassword(i){
    // 千位數字
    var a = (parseInt(i / 1000) + 5) % 10;
    // 百位數字
    var b = (parseInt(i / 100) % 10 + 5) % 10;
    // 十位數字
    var c = (parseInt(i / 10) % 10 + 5) % 10;
    // 個位數字
    var d = (i % 10 + 5) % 10;
    var temp = a;
    a = d;
    d = temp;
    temp = b;
    b = c;
    c = temp;
    return a * 1000 + b * 100 + c * 10 + d;
}
console.log(generatePassword(3759));

編寫函數,計算任意兩個數字之間所能組成的奇數個數,數字必須是個位數。比如:計算0~3之間能組成的奇數是: 01、03、13、21、23、31

function countOdd(a, b){
    // 默認a<b,若a>b則a,b換位
    if(a > b){
        var temp = a;
        a = b;
        b = temp;
    }
    for(var i = a , count = 0 ; i <= b ; i++){
        for(var j = a ; j <= b ; j++){
            if(i % 2 !== 0 && j !== i){
                console.log("" + j + i);
                count++; 
            }                      
        }               
    }
    return count;
}
console.log(countOdd(3, 0));

四、遞歸類

編寫函數,輸入n爲偶數時,調用函數求1/2+1/4+…+1/n,當輸入n爲奇數時,調用函數求1/1+1/3+…+1/n

function calculator(n){
    if(n === 1 || n === 2){
        return 1 / n;
    }
    return 1 / n + calculator(n - 2);
}
console.log(calculator(5));
console.log(calculator(6));

在頁面輸入任意數字,點擊按鈕後計算該數字的階乘

function factorial(n){
    if(n === 1){
        return 1;
    }
    return n * factorial(n - 1);
}
var value = prompt("請輸入數字:");
btn.onclick = function(){
    console.log(factorial(value)); 
}

斐波那契數列(1,1,2,3,5,8···)

function fun(i){
    if(i === 1 || i === 2){
        return 1;
    }
    return fun(i - 1) + fun(i - 2);
}
console.log(fun(3));

輾轉相除法(求最大公約數)

function fun(a, b){
    if(a % b === 0){
        return b;
    }
    var r = a % b;
    a = b;
    b = r;
    return fun(a , b);
}
console.log(fun(16, 24));

五、數組類

定義一個含有30個整型元素的數組,按順序分別賦予從2開始的偶數;然後按順序每五個數求出一個平均值,放在另一個數組中並輸出。試編程

var arr = [];
var res = [];
var sum = 0;
for(var i = 1 ; i < 31 ; i++){
    arr.push(2 * i);
    sum += 2 * i;
    if(i % 5 === 0){
        res.push(sum / 5);
        sum = 0;
    }
}
console.log(res);

編寫函數map(arr) 把數組中的每一位數字都增加30%,並返回一個新數組

function map(arr){
    var new_arr = [];
    for(var i = 0; i < arr.length; i++){
        // Math.round 解決數組元素中存在浮點數時的計算誤差問題
        new_arr.push(Math.round(arr[i] * 1.3 * 10) / 10);
    }
    return new_arr;
}
var arr = [1, 10, 100, 1000, 10000];
console.log(map(arr));

有一個從小到大排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中

function sort(arr, value){
    if(arr[arr.length - 1] <= value){
        arr.push(value);
    }else{
        for(var i = 0 ; i < arr.length ; i++){
            if(arr[i] > value){
                arr.splice(i, 0, value);
                break;
            }
        }
    }
    return arr;
}
var arr = [1, 5, 8, 10, 14];
var value = +prompt("請輸入數字:"); 
console.log(sort(arr, value));

編寫函數norepeat(arr) 將數組的重複元素去掉,並返回新的數組

function norepeat(arr){
    for(var i = 0; i < arr.length; i++){
        for(var j = i + 1; j < arr.length; j++){
            if(arr[i] === arr[j]){
                arr.splice(j, 1);
                j--;
            }
        }
    }
    return arr;
}
var arr = [1, 2, 2, 5, 5, 6, 4, 4, 7, 1, 3, 5];
console.log(norepeat(arr));

通過循環按執行順序,做一個5×5的二維數組,賦1到25的自然數,然後輸出該數組的左下半三角。試編程

var arr =[];
var res = [];
var new_arr = [];
for(var i = 1; i < 26; i++){
    res.push(i);
    if(i % 5 === 0){
        arr.push(res);
        res = [];
    }
}
for(var j = 0; j < 5 ; j++){
    new_arr.push(arr[j].slice(0, j + 1));
}
console.log(arr);
console.log(new_arr);

實現filter、every、some函數

function filter(arr, fn){
    var res_arr = [];
    for(var i = 0; i < arr.length; i++){
        var res = fn(arr[i]);
        if(res){
            res_arr.push(arr[i]);
        }
    }
    return res_arr;
}

function every(arr, fn){
    var flag = true;
    for(var i = 0; i < arr.length; i++){
        if(!fn(arr[i])){
            flag = false;
            break;
        }
    }
    return flag;
}

function some(arr, fn){
    var flag = false;
    for(var i = 0; i < arr.length; i++){
        if(fn(arr[i])){
            flag = true;
            break;
        }
    }
    return flag;
}


var arr = [1, 2, 3, 4, 5];
console.log(filter(arr, function(item){
    return item > 3;
}))
console.log(every(arr, function(item){
    return item > 3;
}))
console.log(some(arr, function(item){
    return item > 3;
}))

冒泡排序

var arr = [3, 5, 2, 7, 9, 11, 6];
for(var k = 0 ; k < arr.length - 1 ; k++){
    // i < arr.length - 1 ==> 沒必要比較最後一個數和undefined
    // i < arr.length - 1 - k ==> 已經排序好的不用再比對
    for(var i = 0 ; i < arr.length - 1 - k ; i++){
        if(arr[i] > arr[i + 1]){
            var temp = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = temp;
        }
    }
}
console.log(arr);

選擇排序

var arr = [3, 5, 2, 7, 9, 11, 6];
for(var k = 0 ; k < arr.length ; k++){
    // 假定的最小值
    var min = arr[k];
    var index = k;
    for(var i = 1 + k ; i < arr.length ; i++){
        // 記錄實際最小值
        if(arr[i] < min){
            min = arr[i];
            index = i;
        }
    }
    // 實際最小值和假定最小值換位
    arr[index] = arr[k];
    arr[k] = min;
}
console.log(arr);

桶排序

var arr = [3, 2, 5, 7, 10];
// 建立對於最大值數量的桶,該步可省略
// 承載下標的容器
var bocket = [];
for(var i = 0; i < arr.length; i++){
    // 往桶裏注水
    bocket[arr[i]] = 1;
}
arr.length = 0;
// 用for in可略過empty的數據
for(var attr in bocket){
    // attr是字符串,需要轉換爲數字
    arr.push(Number(attr));
}
console.log(arr);

快速排序

function quickSort(arr){
    // 終止條件
    if(arr.length === 1 || arr.length === 0){
        return arr;
    }
    // 找中點
    var mid_index = parseInt(arr.length / 2);
    var mid_num = arr[mid_index];
    // 分左右
    var left = [];
    var right = [];
    for(var i = 0; i < arr.length; i++){
        // 不和中比對
        if(i === mid_index){
            continue;
        }
        // 分配左右
        if(arr[i] > mid_num){
            right.push(arr[i]);
        }else{
            left.push(arr[i]);
        }
    }
    // 拼接左、中、右三者的結果(注意中點爲值,需要加中括號變成數組)
    return quickSort(left).concat([mid_num], quickSort(right));
}
var arr = [2, 5, 1, 3, 7];
console.log(quickSort(arr));

六、字符串類

編寫函數,輸出四位數的數字字母混合驗證碼(數字+大寫字母+小寫字母)

function getRandomInt(min , max){
    return  min + parseInt( Math.random() * (max - min + 1));
}
function generateCode(){
    var min, max;
    var code = "";
    for(var i = 0 ; i < 4 ; i ++){
        switch(getRandomInt(1 , 3)){
            case 1 :
                min = 48;
                max = 57;
                break;
            case 2 :
                min = 65;
                max = 90;
                break;
            case 3 :
                min = 97;
                max = 122;
                break;
        }
        var randomInt = getRandomInt(min , max);
        code += String.fromCharCode(randomInt);
    }
    return  code;
}
console.log(generateCode());

aabccd統計每個字符出現的次數,使結果顯示爲一個對象,如:{a:2, b:1, c:2, d:1},去掉重複的字符,使結果顯示 abcd

function fn(str){
    var obj = {};
    for(var i = 0; i < str.length; i++){
        var attr = str[i];
        if(obj[attr] === undefined){
            obj[attr] = 1;
        }else{
            obj[attr]++;
        }
    }
    console.log(obj);
    var string = "";
    for(var key in obj){
        string += key;
    }
    console.log(string);
}
var str = "aabccd";
fn(str);

編寫函數,判斷一個字符串是否是 “可迴文字符串”,如:abccba。是:true;不是:false

// 方法1
function judgePalindrome(str){
    var n = parseInt((str.length + 1) / 2);
    var flag = true;
    for(var i = 0; i < n; i++){
        if(str[i] !== str[str.length - i - 1]){
            flag = false
            break;
        }
    }
    return flag;
}

// 方法2
function judgePalindrome(str){
    // 字符串 => 數組 => 倒序數組 => 字符串
    var new_str = str.split("").reverse().join("");
    return str === new_str;
}
console.log(judgePalindrome("abccba"));
console.log(judgePalindrome("abcgcba"));
console.log(judgePalindrome("abcdba"));

編寫函數,獲得一個十六進制的隨機顏色的字符串(例如:#20cd4f)

function getColorNum(){
    var color = "#";
    for(var i = 0 ; i < 6 ; i ++){
        color += parseInt(Math.random() * 15).toString(16);
    }
    return color;
}
console.log(getColorNum());

字符串拼接配合json實現商品列表佈局

<head>
    <style>
        body{margin: 0; padding: 0; background: #b6b6b6; }
        .center{ width: 1380px; height: 233px; margin: 0 auto; }
        .center .box{ width: 260px; height: 193px; border-radius: 4px; float: left; margin-right: 20px; background: #fff; }
        .center .box:last-of-type{ margin-right: 0; }
        .center .box img{ width: 260px; height: 146px; }
        .center .box p{ padding: 0 10px; margin-top: 4px; font: 14px/1.5 "PingFang SC","Lantinghei SC","Microsoft YaHei","HanHei SC","Helvetica Neue","Open Sans",Arial,"Hiragino Sans GB","微軟雅黑",STHeiti,"WenQuanYi Micro Hei",SimSun,sans-serif; }
    </style>
</head>
<body>
    <div class="center" id="center"></div>
    <script>
        var json = `[
            {
                src : "https://image.gogoup.com/course/20181016/1539669673749.jpg",
                title : "教你畫卡通IP"
            },
            {
                src : "https://image.gogoup.com/course/20190115/1547541116847.jpg",
                title : "商業插畫之時尚人物篇"
            },
            {
                src : "https://image.gogoup.com/course/20180824/1535089522410.jpg",
                title : "10堂課看懂西方藝術史"
            },
            {
                src : "https://image.gogoup.com/course/20200301/1583074941120.png",
                title : "UI設計適配與落地"
            },
            {
                src : "https://image.gogoup.com/course/20181016/1539689983190.jpg",
                title : "商業UI設計:全鏈式設計方法與流程"
            }
        ]`
        var item_list = eval(json);
        var insert_html = "";
        for(var i = 0; i < item_list.length; i++){
            insert_html +=  '<div class="box">' + 
                                '<img src="' + item_list[i].src +'" alt="">' + 
                                '<p>' + item_list[i].title +'</p>' + 
                            '</div>'
        }
        var center = document.getElementById("center");
        center.innerHTML = insert_html;
    </script>
</body>
</html>

七、Date類

編寫函數,把當前時間格式化成 YYYY-MM-DD HH-MM-SS

function getTime(){
    var d = new Date();
    var res = "";
    res += d.getFullYear() + "-";
    res += getDblTime(d.getMonth() + 1) + "-";
    res += getDblTime(d.getDate()) + " ";
    res += getDblTime(d.getHours()) + "-";
    res += getDblTime(d.getMinutes()) + "-";
    res += getDblTime(d.getSeconds());
    return res;
}
function getDblTime(num){
    if(num >= 10){ return num; }
    return "0" + num;
}
console.log(getTime());

編寫函數,要求傳入兩個日期時間,返回兩個日期時間之間,相差 多少天多少小時多少分鐘多少秒

function dateReduce(options){
    if(options.start === undefined || options.start === "now"){
        start_d = new Date();
    }else{
        var start_str = formateDateArray(options.start);
        var start_d   = new Date(start_str);
    }
    var end_str   = formateDateArray(options.end);
    var end_d     = new Date(end_str);
    var reduce_ms = end_d.getTime() - start_d.getTime();
    return {
        days  : parseInt(reduce_ms / 1000 / 3600 / 24),
        hours : parseInt(reduce_ms / 1000 / 3600 % 24),
        min   : parseInt(reduce_ms / 1000 / 60 % 60),
        sec   : parseInt(reduce_ms / 1000 % 60 )
    }
}
function formateDateArray( arr ){
    var date_str = "";
    switch(arr.length){
        case 3 : 
            date_str = arr.join("/");
            break;
        case 6 : 
            date_str = arr.slice(0,3).join("/");
            date_str += " " + arr.slice(3).join(":")
            break;
    }
    return date_str;
}
var res = dateReduce({
    // start : [1995,8,24,8,0,0],
    start : "now",
    end   : [2020,3,6,0,0,0]
});
console.log(res);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章