如何编写一个文件(程序)来绘制(可能在 TikZ 中)区间 [0, 18] 的所有分区,其中 6 个区间大小为 1,6 个区间大小为 2?
观察发现,这些分区与两个数列(仅 1 和 2)组成的数字是一一对应的,其中最小的数字是:
111111222222
最后一个
222222111111
其中还有不少。
答案1
您可以进行简单的双重递归来生成 1 和 2 的列表,然后遍历该列表中的每个项目,以绘制相隔 1 或 2 个单位的线来显示分区
\documentclass{article}
\def\z#1#2#3{%
\ifnum#2>0
\edef\tmp{\noexpand\z{#11}{\the\numexpr#2-1\relax}{#3}}\tmp\par
\fi
\ifnum#3>0
\edef\tmp{\noexpand\z{#12}{#2}{\the\numexpr#3-1\relax}}\tmp\par
\else
\ifnum#2=0
#1 \quad \p{#1}\par
\fi
\fi
}
\newcount\zcount
\def\p#1{%
\begin{picture}(180,10)
\global\zcount=0
\multiput(0,-5)(10,0){19}{\makebox(0,0){\tiny\the\zcount}\global\advance\zcount1 }
\global\zcount=0
\put(0,0){\line(0,1){10}}
\zrules#10
\end{picture}}
\def\zrules#1{%
\ifnum#1=0
\else
\global\advance\zcount\numexpr10*#1\relax
\put(\zcount,0){\line(0,1){10}}%
\expandafter\zrules
\fi}
\parskip=20pt
\begin{document}
\z{}66
\end{document}