SchoolWork-LaTeX/数据结构/实验报告/10213903403第二章作业.tex

56 lines
3.5 KiB
TeX
Raw Permalink Normal View History

2024-09-02 17:47:53 +08:00
\documentclass[实验报告模板]{subfiles}
\renewcommand{\mydate}{
2023/10/10
}
\renewcommand{\mychapternum}{2}
\begin{document}
\mytitle
\begin{enumerate}
\myitem{实验目的}{
\item 使用第二章知识解决约瑟夫环问题(复杂版)。
}
\myitem{实验内容}{
\item 在原有约瑟夫环的基础上,输入参与这场游戏的人数 n 与自杀报数 m
输出为最后两个幸存者的位置序号。
\item 在第一题的基础上,输入参与这场游戏的人数 n 与两个自杀报数 a 和
b按照一次 a 一次 b 的顺序自杀ab 可以为负数,正数代表正向,
负数代表反向),输出为最后两个幸存者的位置序号。
}
\myitem{实验原理}{
\item 程序设计原理。
}
\myitem{实验步骤}{
\item 问题抽象
\item 编写程序
\item 调试程序
\item 完善总结
}
\myitem{调试过程、结果和分析}{
\item 简单考虑暂时不考虑输入错误或者输入为0的情况
\item JavaScript没有指针的概念所以使用对象的引用代替
\item JavaScript在严格模式下暂时无法直接删除对象因此移除结点时无法完全销毁一个节点
\item 最后只留下两个,而不是$\min(\mathrm{abs}(a), \mathrm{abs}(b))-1$个;
\item 删除的结点应该作为第0个此时往前a个或往后b个一开始如果a是正数那么应该按照$1, 2, 3, \ldots $的顺序遍历如果a是负数那么应该按照$n, n-1, n-2, \ldots $的顺序遍历;
\item 由于此问题中只涉及到初始化链表、删除单个结点两个操作,因此链表的添加结点、清空、销毁等操作暂不需要实现。
}
\myitem{总结}{
\item 由于JavaScript的异步性质需要进行连续多个输入时可以将回调过程封装成Promise对象后使用async创建异步函数在其中使用await可以方便使用Promise对象避免大量回调同时也可以结合循环、分支等结构实现更复杂的控制
\item 抽象出了结点对象和链表对象并且实现了从当前节点开始寻找第n个结点可以为负数的方法
\item 整个文件中只有input和main\_函数与Node.js环境耦合即使用了readline模块而主要功能放在main函数中因此在浏览器环境中可以直接调用main函数方便代码复用。
}
\myitem{附件}{
\itemsep 3em
\item 在原有约瑟夫环的基础上,输入参与这场游戏的人数 n 与自杀报数 m
输出为最后两个幸存者的位置序号。\\
JavaScriptNode.js环境
\inputminted[linenos=true,breaklines=true]{javascript}{../JavaScript/第二章作业1.js}
\item 在第一题的基础上,输入参与这场游戏的人数 n 与两个自杀报数 a 和
b按照一次 a 一次 b 的顺序自杀ab 可以为负数,正数代表正向,
负数代表反向),输出为最后两个幸存者的位置序号。\\
JavaScriptNode.js环境
\inputminted[linenos=true,breaklines=true]{javascript}{../JavaScript/第二章作业2.js}
}
\end{enumerate}
\end{document}