• 士兵算法


    题目描述:

    键盘输入三个数字,以空格分隔

    第一个数字表示有多少个士兵(从1开始编号)

    第二个数字表示接下来会输入几组数字

    第三个数字表示需要输出几号士兵最后的编号

    接下来输入的两个一组的数字,两个数字以空格分开,表示需要交换位置的两个士兵的编号

    例如: 2 8

    表示 2号和8号交换位置,3号和7号交换位置,4号和6号交换位置,5号位置不变

    如果有多组输入,进行同样操作,

    最后输出第一次的第三个数字的士兵最后所处的位置

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>士兵算法</title>
      <script>
        let str1 = prompt("请输入三个数字(以空格分隔):");
        let arr1 = str1.split(" ");
        let resultIndex = arr1[2]-1;
        //console.log(arr);
        let num = [];
        for(let i=0; i<arr1[0]; i++) {
          num.push((i+1))
        }
        let count = arr1[1];
        let index1;
        let index2;
        for(let i=0; i<count; i++) {
          let str = prompt("请输入两个数字(以空格分隔):");
          let arr = str.split(" ");
          index1 = arr[0]-1;
          index2 = arr[1]-1;
          let resArr = change(num);
          //console.log(resArr);
        }
        // let str2 = "1 5";
        // let num2Arr = str2.split(" ");
        // let str3 = "2 9";
        // let num3Arr = str3.split(" ");
    
        function change(arr) {
          console.log(arr);
          if(index1 >= index2) {
            console.log(arr[resultIndex]);
            return arr;
          }
          let temp = arr[index1];
          arr[index1] = arr[index2];
          arr[index2] = temp;
    
          change(arr, index1++, index2--);
        }
        //let arr3 = change(arr2, 2-1, 4-1);
        //let arr4 = change(arr3, 1-1, 4-1);
      </script>
    </head>
    <body>
    
    </body>
    </html>
  • 相关阅读:
    C# SocketAsyncEventArgs Server
    C# Socket 入门5 UPD 结构体 与 C++ 通信
    如何取得 Func 对象 字段
    动态调用对象的属性和方法——性能和灵活性兼备的方法
    C# 读写锁 ReaderWriteLock
    C# IP多播
    C# 广播通信
    程序员那点儿事
    wince上数据库:sqlce和sqlite
    evc vc字符串转换处理
  • 原文地址:https://www.cnblogs.com/lilililiwang/p/14841252.html
Copyright © 2020-2023  润新知