如何生成随机负整数?

如何生成随机负整数?

我正在尝试创建一个由随机数组成的工作表,以便孩子们可以练习整数运算。例如

3+-9=?

2x(-5)=?

18/-3=?

ETC。

我该怎么做呢?

这是迄今为止我尝试过的。

\documentclass{minimal}

\usepackage{tikz}

\begin{document}

\pgfmathparse{random(-10,10)}
\pgfmathresult

\end{document}

两个问题。

  1. 为什么整数前面多了一个0.0.?
  2. 为什么我的界限是 -10 和 10,而随机数却是 7?反复选择 7 似乎不太随机。

其中一些内容在另一个线程但这个话题已经有好几年了。

有想法吗?

谢谢!

答案1

为了解决该random函数的错误,你可以定义一个新randomfixed函数:

\tikzset{declare function={randomfixed(\a,\b) = int(random(0,int(\b-\a))+\a);}}

现在,您可以在两个边界之间生成一个随机整数,并用括号括起来表示负整数:

\newcommand\randomint[2]{\bgroup%
  \pgfmathsetmacro\myval{randomfixed(#1,#2)}%
  \pgfmathsetmacro\final{(\myval < 0)?"(\myval)":\myval}%
  \final\egroup%
}

您可以生成随机运算符:

\def\ops{{"+","-","\times","/"}}
\newcommand\randomop{\bgroup\pgfmathsetmacro\op{\ops[int(rnd*4)]}\op\egroup}

要每秒更改伪随机数生成器的种子,您可以使用宏\pdfuniformdeviate

\pgfmathsetseed{\pdfuniformdeviate 10000000}

全部代码:

\documentclass{article}
\usepackage{tikz}

% fix bug with random(a,b)
\tikzset{declare function={randomfixed(\a,\b) = int(random(0,int(\b-\a))+\a);}}

% get random integer
\newcommand\randomint[2]{\bgroup%
  \pgfmathsetmacro\myval{randomfixed(#1,#2)}%
  \pgfmathsetmacro\final{(\myval < 0)?"(\myval)":\myval}%
  \final\egroup%
}

% get random operator
\def\ops{{"+","-","\times","/"}}
\newcommand\randomop{\bgroup\pgfmathsetmacro\op{\ops[int(rnd*4)]}\op\egroup}

% choose random seed
\pgfmathsetseed{\pdfuniformdeviate 10000000}

\pagestyle{empty}
\begin{document}
\foreach \n in {1,...,10}{
   $\randomint{-10}{10} \randomop{} \randomint{-10}{10} = $\par
}
\end{document}

结果是:

在此处输入图片描述

答案2

另一种方法是:

\documentclass{article}

\usepackage{tikz}

\begin{document}

\foreach \x in {1,...,100}{
\pgfmathparse{int(rand * 11)}
\pgfmathresult, }

\end{document}

答案3

两个问题:

  • 您反复得到相同结果是因为缺少种子。由于您使用的是伪随机数生成器,否则您将得到相同的序列。

  • 生成 -10 到 10 之间的随机整数的一种快速方法是生成 0 到 20 之间的整数,然后将其移动 -10。


\documentclass{minimal}

\usepackage{tikz}

\begin{document}

    \pgfmathsetseed{\number\pdfrandomseed} 

\foreach \n in {1,...,100}{

    \pgfmathparse{random(0,20)-10}
    \pgfmathresult

}

\end{document}

相关内容