使用 algorithmic 包编写伪代码

使用 algorithmic 包编写伪代码

我有个疑问,为什么第四行给我留了一行空白?我可以删除“语句”end while 和 end for 吗?

\begin{algorithmic} [1]
\FOR{$j \gets 0$ \TO $n - 1$  } \STATE{$t \gets A[j]$ \STATE {$i\gets j-1$}
 \STATE{\WHILE{$i\geq 0$ and $A[i]>t$} \STATE{$A[i+1]\gets A[i]$\STATE{$i\gets i-1$}} \ENDWHILE $A[i+1]\gets t$}} \ENDFOR
\end{algorithmic}

在此处输入图片描述

答案1

我认为您滥用了该工具:您不应该嵌套\WHILE声明\STATE

\documentclass{article}
\usepackage{algorithmic}

\begin{document}

\begin{algorithmic} [1]
\FOR{$j \gets 0$ \TO $n - 1$}
  \STATE{$t \gets A[j]$}
  \STATE {$i\gets j-1$}
  \WHILE{$i\geq 0$ and $A[i]>t$}
    \STATE{$A[i+1]\gets A[i]$}
    \STATE{$i\gets i-1$}
  \ENDWHILE
  \STATE{$A[i+1]\gets t$}
\ENDFOR
\end{algorithmic}

\end{document}

在此处输入图片描述

正如 Manuel 在评论中正确建议的那样,该noend选项会使“End”标签消失:

\documentclass{article}
\usepackage[noend]{algorithmic}

\begin{document}

\begin{algorithmic} [1]
\FOR{$j \gets 0$ \TO $n - 1$}
  \STATE{$t \gets A[j]$}
  \STATE {$i\gets j-1$}
  \WHILE{$i\geq 0$ and $A[i]>t$}
    \STATE{$A[i+1]\gets A[i]$}
    \STATE{$i\gets i-1$}
  \ENDWHILE
  \STATE{$A[i+1]\gets t$}
\ENDFOR
\end{algorithmic}

\end{document}

在此处输入图片描述

相关内容