最方便推荐使用overleaf书写伪代码,在书写时注意格式,这里笔者记录几个自己的问题:
1.if-else伪代码写法
%if elseif else
\If {"condition"} "text"
\ElsIf {"condition"} "text"
\Else "text"
\EndIf
对于中文使用$$包裹就行
2.\For
\EndFor
注意大小写不然不会成功显示
3.以数塔问题伪代码书写示例(在需要修改的地方有注释,读者只需要复制到overleaf修改对应内容就可以运行):
\documentclass[11pt]{ctexart}
\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}
\usepackage{algorithm}
\usepackage{algorithmicx}
\usepackage{algpseudocode}
\usepackage{amsmath} //这里之前是一些宏包和格式定义,保证能识别latax语言和伪代码整体美观
\floatname{algorithm}{算法}
\renewcommand{\algorithmicrequire}{\textbf{输入:}}
\renewcommand{\algorithmicensure}{\textbf{输出:}}
\begin{document}
\renewcommand{\thealgorithm}{}
\begin{algorithm}
\caption{数塔问题} //这里写算法名称
\begin{algorithmic}[1] %每行显示行号
\Require 数塔层数n,每层节点数值//这里写输入内容
\Ensure dp[n][m],最大路径和与具体路径//这里写输出内容
\State $dpTower[tower.length - 1] \gets tower[tower.length-1]$//普通语句用\State ,中文和内容用$$括起来
\For{$i\gets tower.length - 2\; to\;i >= 0$} //\For用来写for循环,结束用\EndFor
\State {$dpTower[i]\gets tower[i].clone()$}
\For{$j\gets 0\; to\;dpTower[i].length-2$}
\If {dpTower[i+1][j]> dpTower[i+1][j+1]) }//\If用来写if判断,\Else用来分支,结束用\EndIf
\State {$dpTower[i][j] += dpTower[i+1][j]$ }
\Else
\State {$ dpTower[i][j] += dpTower[i+1][j+1]$}
\EndIf
\EndFor
\EndFor
\State $ System.out.println("$最优路径长度:$" + dpTower[0][0])$
\State $System.out.println("$最优路径:$")$
\State $j\gets 0$
\For{$i\gets 0\; to\;dpTower.length-2$}
\If{$j<dpTower[i].length-1 && dpTower[i][j] < dpTower[i][j+1] $}
\State $j \gets j+1$
\State $System.out.println(tower[i][j] + "->")$
\EndIf
\EndFor
\If{$j<dpTower[dpTower.length-1].length-1 && dpTower[dpTower.length-1][j] < dpTower[dpTower.length-1][j+1] $}
\State $j \gets j+1$
\State $System.out.println(tower[dpTower.length-1][j])$
\EndIf
\end{algorithmic} \\这里之后不要删,用来形成显示框架
\end{algorithm}
\end{document}
4.下划线要用\_,否则后面的数会变成下角标
5.\Retrun返回不换行,前面加\State