js之基础算法案例

1 判断是闰年还是平年

算法:能被4整除且不能整除100的为闰年 或者能够被 400 整除的是闰年

// 接收用户输入
var year = prompt('请您输入年份:'); 
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
    alert('您输入的年份是闰年');
} else {
    alert('您输入的年份是平年');
}

2 一行打印5个 *

var str = '';
for (var m = 0; m < 5; m++) {
    str += '★';
}
console.log(str);

// 输出: ★★★★★

3 打印五行五列星星

var str = '';
for (var m = 0; m < 5; m++) {
    // 外层循环负责打印五行
    for (var n = 0; n < 5; n++) {
        // 内层循环负责一行打印五个星星
        str += '★';
    }
    str += '\n'; // 每次满 5个星星 就 加一次换行
}
console.log(str);

/*
★★★★★
★★★★★
★★★★★
★★★★★
★★★★★
*/

4 打印倒三角形

var str = '';
for (var m = 1; m <= 10; m++) {
    for (var n = m; n <= 10; n++) {
        str += '★';
    }
    str += '\n'; // 换行
}
console.log(str);

/*
★★★★★★★★★★
★★★★★★★★★
★★★★★★★★
★★★★★★★
★★★★★★
★★★★★
★★★★
★★★
★★
★
*/

5 打印正三角形

var str = '';
for (var m = 1; m <= 10; m++) {
    for (var n = 1; n <= m; n++) {
        str += '★';
    }
    str += '\n'; // 换行
}
console.log(str);
/*
★
★★
★★★
★★★★
★★★★★
★★★★★★
★★★★★★★
★★★★★★★★
★★★★★★★★★
★★★★★★★★★★
*/

6 打印 九九乘法表

/*
一共有9行,但是每行的个数不一样,因此需要用到双重 for 循环
外层的 for 循环控制行数 i ,循环9次 ,可以打印 9 行  
内层的 for 循环控制每行公式  j  
核心算法:每一行 公式的个数正好和行数一致, j <= i;
每行打印完毕,都需要重新换一行
*/
var str = '';
for (var i = 1; i <= 9; i++) {
    for (var j = 1; j <= i; j++) {
        str += '' + j + ' × ' + i + '= ' + i * j + '' + '\t';
    }
    str += '\n'; // 换行
}
console.log(str);

/*
1 × 1= 1	
1 × 2= 2	2 × 2= 4	
1 × 3= 3	2 × 3= 6	3 × 3= 9	
1 × 4= 4	2 × 4= 8	3 × 4= 12	4 × 4= 16	
1 × 5= 5	2 × 5= 10	3 × 5= 15	4 × 5= 20	5 × 5= 25	
1 × 6= 6	2 × 6= 12	3 × 6= 18	4 × 6= 24	5 × 6= 30	6 × 6= 36	
1 × 7= 7	2 × 7= 14	3 × 7= 21	4 × 7= 28	5 × 7= 35	6 × 7= 42	7 × 7= 49	
1 × 8= 8	2 × 8= 16	3 × 8= 24	4 × 8= 32	5 × 8= 40	6 × 8= 48	7 × 8= 56	8 × 8= 64	
1 × 9= 9	2 × 9= 18	3 × 9= 27	4 × 9= 36	5 × 9= 45	6 × 9= 54	7 × 9= 63	8 × 9= 72	9 × 9= 81	
*/

7 翻转数组

// 将数组 ['red', 'green', 'blue', 'pink', 'purple'] 的内容反过来存放
var arr = ['red', 'green', 'blue', 'pink', 'purple'];
var newArr = []; // 新的数组,用来存放翻转后的元素
for (var i = arr.length - 1; i >= 0; i--) {
    // 采用循环递减的方式
    newArr[newArr.length] = arr[i];
}
console.log(newArr); // 返回:['purple', 'pink', 'blue', 'green', 'red']

8 冒泡排序

    // 冒泡排序:从小到大
    var arr = [4, 1, 2, 3, 5];
    for (var i = 0; i < arr.length - 1; i++) {
      // 外层循环管趟数 
      for (var j = 0; j < arr.length - i - 1; j++) {
        // 里面的循环管 每一趟的交换次数
        // 内部交换2个变量的值 前一个和后面一个数组元素相比较
        if (arr[j] > arr[j + 1]) {
          var temp = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = temp;
        }
      }
    }
    console.log(arr)

image-20220330113058144

9 水仙花数

水仙花数:是指一个3位数,他的每个位上的数字的3次幂之和等于他本身(例如13+53+3^3=153)

for (var n = 100; n < 1000; n++) {
    //将3位数分别拆分:百位、十位、个位

    //方法一
    var bai = parseInt(n / 100);
    var shi = parseInt(n % 100 / 10);
    var ge = parseInt(n % 100 % 10);
    
    //方法二
    var bai = parseInt(n / 100);
    var shi = parseInt((n - bai * 100) / 10);
    var ge = parseInt((n - bai * 100 - shi * 10) / 1);
    
    //方法三
    var bai = +String(n).substring(0, 1);
    var shi = +String(n).substring(1, 2);
    var ge = +String(n).substring(2, 3);

    if (bai * bai * bai + shi * shi * shi + ge * ge * ge == n) {
        console.log(n);   //返回 153 370 371 407
    }
    s
}

10 判断一个数是否是质数

只能被1和它自身整除的数,1既不是质数也不是合数,质数必须是大于1的自然数

var num = prompt('请输入一个大于1的自然数');
//中间变量:表示是否是质数
var flag = true;
for (var i = 2; i < num; i++) {
    if (num % i == 0) {
        //如果num能被i整除,那么num一定不是质数
        flag = false;
        break;  //直接跳出for循环
    }
}
if (flag) {
    alert('是质数');
} else {
    alert('不是质数')
}

11 打印出1-100之间所有的质数

1既不是质数也不是合数

 for (var m = 2; m <= 100; m++) {
        var flag = true;
        for (var n = 2; n < m; n++) {
            //如果m能被n整除,那么m一定不是质数
            if (m % n == 0) {
                flag = false;
                break;
            }
        }
        if (flag) {
            console.log(m);
        }
    }

12 checkbox选中与不选中

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }

    .wrap {
      width: 300px;
      margin: 100px auto 0;
    }

    table {
      border-collapse: collapse;
      border-spacing: 0;
      border: 1px solid #c0c0c0;
      width: 300px;
    }

    th,
    td {
      border: 1px solid #d0d0d0;
      color: #404060;
      padding: 10px;
    }

    th {
      background-color: #09c;
      font: bold 16px "微软雅黑";
      color: #fff;
    }

    td {
      font: 14px "微软雅黑";
    }

    tbody tr {
      background-color: #f0f0f0;
    }

    tbody tr:hover {
      cursor: pointer;
      background-color: #fafafa;
    }
  </style>
</head>

<body>
  <div class="wrap">
    <table>
      <thead>
        <tr>
          <th>
            <input type="checkbox" id="j_cbAll" />
          </th>
          <th>商品</th>
          <th>价钱</th>
        </tr>
      </thead>
      <tbody id="j_tb">
        <tr>
          <td>
            <input type="checkbox" />
          </td>
          <td>iPhone8</td>
          <td>8000</td>
        </tr>
        <tr>
          <td>
            <input type="checkbox" />
          </td>
          <td>iPad Pro</td>
          <td>5000</td>
        </tr>
        <tr>
          <td>
            <input type="checkbox" />
          </td>
          <td>iPad Air</td>
          <td>2000</td>
        </tr>
        <tr>
          <td>
            <input type="checkbox" />
          </td>
          <td>Apple Watch</td>
          <td>2000</td>
        </tr>

      </tbody>
    </table>
  </div>
  <script>
    // 全选按钮
    var j_cbAll = document.querySelector('#j_cbAll');
    // tbody元素
    var tbody = document.querySelector('#j_tb');
    // input 单选框元素
    var inputs = tbody.querySelectorAll('input');

    // 全选和选不选操作事件
    j_cbAll.onclick = function () {
      for (var i = 0; i < inputs.length; i++) {
        inputs[i].checked = this.checked;
      }
    }

    // inputs 选中与不选中
    var flag = true;
    for (var i = 0; i < inputs.length; i++) {
      inputs[i].onclick = function () {
        for (var i = 0; i < inputs.length; i++) {
          if (!this.checked) {
            flag = false;
            // 退出for循环 这样可以提高执行效率 因为只要有一个没有选中,剩下的就无需循环判断了  
            break;
          }
        }
      };
    }
    if (flag) {
      j_cbAll.checked = true;
    }

  </script>
</body>

</html>

13 求 n 的阶乘

// 求 n 的阶乘 n*(n-1)*(n-2)* .... *3*2*1
function fn(n) {
    if (n == 1) {
      return 1;
    }
    return n * fn(n - 1);
}

console.log(fn(3)) // 返回:3*2*1=6
console.log(fn(5)) // 返回:5*4*3*2*1=120

14 求斐波那契数列

利用递归函数求斐波那契数列: 1、1、2、3、5、8、13、21...

// 求第 n 个数的斐波那契数列
// 1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理

function fb(n) {
    if (n === 1 || n === 2) {
        return 1;
    }
    return fb(n - 1) + fb(n - 2);
}

console.log(fb(3));  // 返回:2
console.log(fb(6));  // 返回:8
posted @ 2023-10-10 09:54  songxia777  阅读(13)  评论(0编辑  收藏  举报