实验5 数组的应用实验目的:

实验目的:1、掌握数组的创建

2、掌握数组的访问与遍历

3、掌握数组的属性与方法

实验重点:创建数组、数组的访问与遍历、数组元素的添加与修改、遍历数组。

实验内容:

1、用冒泡排序法实现数组arr[10,26,58,96,43]升序输出,写出每一趟排序的结果,写出程序代码。

 console.log('1、用冒泡排序法实现数组arr[10, 26, 58, 96, 43]升序输出,写出每一趟排序的结果(试写代码)。');
    var arr = [10, 26, 58, 96, 43];
    var temp;

    console.log("初始数组: " + arr);

    for (var i = 0; i < arr.length - 1; i++) {
      for (var j = 0; j < arr.length - 1 - i; j++) {
        if (arr[j] > arr[j + 1]) {
          // 交换位置
          temp = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = temp;
        }
      }
      console.log("第 " + (i + 1) + " 趟排序结果: " + arr);
    }

    console.log("最终升序排序结果: " + arr);
    console.log('----------分隔符----------');

2、用插入排序法升序实现数组s[89,56,10,21,67,45,1,88]升序输出,写出每一趟排序的结果。

 console.log('2、用插入排序法升序实现数组s[89, 56, 100, 21, 67, 45, 1, 88]升序输出,写出每一趟排序的结果。');
    var s = [89, 56, 100, 21, 67, 45, 1, 88];
    var temp1, j;

    console.log("初始数组: " + s);

    for (var i = 1; i < s.length; i++) {
      temp1 = s[i];
      j = i - 1;

      while (j >= 0 && s[j] > temp1) {
        s[j + 1] = s[j];
        j--;
      }

      s[j + 1] = temp1;
      console.log("第 " + i + " 趟排序结果: " + s);
    }

    console.log("最终升序排序结果: " + s);
    console.log('----------分隔符----------');

3、用选择排序法实现数组arr[13,26,21,76,43]降序输出,写出每一趟排序的结果。

console.log('3、用选择排序法实现数组arr[13, 26, 21, 76, 43]降序输出,写出每一趟排序的结果。');
    var arr1 = [13, 26, 21, 76, 43];
    var temp2, maxIndex;

    console.log("初始数组: " + arr1);

    for (var i = 0; i < arr1.length - 1; i++) {
      maxIndex = i;

      for (var j = i + 1; j < arr1.length; j++) {
        if (arr1[j] > arr1[maxIndex]) {
          maxIndex = j;
        }
      }

      temp2 = arr1[i];
      arr1[i] = arr1[maxIndex];
      arr1[maxIndex] = temp2;

      console.log("第 " + (i + 1) + " 趟排序结果: " + arr1);
    }

    console.log("最终降序排序结果: " + arr1);
    console.log('----------分隔符----------');

4、用数组输出菲波拉切数列的前20个数。

 console.log('4、用数组输出菲波拉切数列的前20个数。');
    function generateFibonacci(n) {
      var fibonacci = [0, 1];

      for (var i = 2; i < n; i++) {
        fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
      }

      return fibonacci;
    }

    var fibonacciArray = generateFibonacci(20);
    console.log("斐波拉切数列的前20个数: " + fibonacciArray);
    console.log('----------分隔符----------');

5、用Array数组对象定义星期值数组,通过当前的时间在页面上显示是今天星期几。

提示:今天的日期var day=new Date() ;星期几:var w=day.getDay();

console.log('5、用Array数组对象定义星期值数组, 通过当前的时间在页面上显示是今天星期几。');
    var day = new Date();
    var w = day.getDay();
    var weekdays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
    var today = weekdays[w];

    console.log("今天是" + today);
    // 提示:今天的日期var day = new Date(); 星期几:var w = day.getDay();
    // 显示效果: 今天是星期三
    console.log('----------分隔符----------');

6、编写程序:定义4*4矩阵二维数组arr[[6,3,5,1],[2,4,8,5],[3,5,6,7],[3,7,6,9]],按矩阵效果输出于屏幕,并求矩阵的主对角线和次对角线之和。

 console.log('6、 编写程序:定义4*4矩阵二维数组arr[[6,3,5,1],[2,4,8,5],[3,5,6,7],[3,7,6,9]],按矩阵效果输出于屏幕,并求矩阵的主对角线和次对角线之和。');
    // 定义矩阵二维数组
    var arr2 = [
      [6, 3, 5, 1],
      [2, 4, 8, 5],
      [3, 5, 6, 7],
      [3, 7, 6, 9]
    ];

    // 输出矩阵效果
    console.log("矩阵效果:");
    for (var i = 0; i < arr2.length; i++) {
      console.log(arr2[i].join("\t"));
    }

    // 计算主对角线和次对角线的和
    var primaryDiagonalSum = 0;
    var secondaryDiagonalSum = 0;

    for (var i = 0; i < arr2.length; i++) {
      primaryDiagonalSum += arr2[i][i]; // 主对角线元素之和
      secondaryDiagonalSum += arr2[i][arr2.length - 1 - i]; // 次对角线元素之和
    }

    console.log("\n主对角线之和: " + primaryDiagonalSum);
    console.log("次对角线之和: " + secondaryDiagonalSum);
    console.log('----------分隔符----------');

7、二维数组的转置,输出转置前和转置后的效果

1   2   3             1    4

4   5   6             2    5

                         3    6

 console.log('7、二维数组的转置,输出转置前和转置后的效果')
    // 转置前的数组
    var originalArray = [
      [1, 2, 3],
      [4, 5, 6]
    ];

    console.log("转置前的数组:");
    for (var i = 0; i < originalArray.length; i++) {
      console.log(originalArray[i].join("\t"));
    }

    // 转置操作
    var transposedArray = [];
    for (var i = 0; i < originalArray[0].length; i++) {
      transposedArray[i] = [];
      for (var j = 0; j < originalArray.length; j++) {
        transposedArray[i][j] = originalArray[j][i];
      }
    }

    console.log("\n转置后的数组:");
    for (var i = 0; i < transposedArray.length; i++) {
      console.log(transposedArray[i].join("\t"));
    }
    console.log('----------分隔符----------');

8、综合应用:【案例】猴子选大王

游戏规则:要求一群猴子排成一圈,按“1,2,……,n”依次编号。然后从第1只开始数,数到第m只,把它踢出圈,其后的猴子再从1开始数,数到第m只,再把它踢出去……,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就是我们要找的大王。

 console.log('6、综合应用:猴子选大王');
    function monkeyKing(totalMonkeys, kickOutIndex) {
      var monkeys = [];

      // 创建猴子数组
      for (var i = 1; i <= totalMonkeys; i++) {
        monkeys.push(i);
      }

      var index = 0;
      while (monkeys.length > 1) {
        index = (index + kickOutIndex - 1) % monkeys.length;
        monkeys.splice(index, 1);
      }

      return monkeys[0];
    }
    console.log('猴子的总数totalMonkeys = 10');
    var totalMonkeys = 10; // 猴子的总数
    console.log('每次踢出第几只猴子(游戏规则)kickOutIndex = 3');
    var kickOutIndex = 3; // 每次踢出第几只猴子---游戏规则
    var king = monkeyKing(totalMonkeys, kickOutIndex);
    console.log("猴子选大王结果: 第 " + king + " 号猴子成为大王");
    console.log('----------分隔符----------');

代码实现思路:(仅供参考)

通过prompt()接收用户传递的猴子总数n和踢出的第m只猴子。

利用数组保存所有猴子的编号(1~n)。

设置一个变量i,记录每次参与游戏(报数)的猴子位置。

通过while循环,只要猴子数组内元素个数大于1,就继续循环。

在循环中判断当前猴子的位置i与m求余是否为0,若为零,删除该数组元素。

提示:通过头部出栈的方式取出猴子,如判断不为0,再将该元素尾部入栈。

本代码由上课实机作业结合外部软件完成,一切操作仅供参考,如有更正请指出一起学习交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值