1

在一组 10 人生成的答案中生成 10 个不应该匹配的唯一数字的方法应该是什么?

4

2 回答 2

3

这个有一个很好的解决方案。我假设您必须以随机方式将数字 1-10 分配给 10 个不同的人(但如果您有 10 个(或更多)不同的非连续数字,该原则也适用)。

  • 排列数组中的数字。
  • 使用混洗算法对数组中的元素进行混洗。
    • (洗牌算法:http ://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle )
  • 从数组中读取前 10 个值,将它们分配给十个人。
于 2012-04-13T15:06:38.937 回答
2

您可以使用操作系统工具来生成 GUID(全局唯一标识符)。

GUID 是一个 32 位的十六进制,如下所示:({21EC2020-3AEA-1069-A2DD-08002B30309D}无耻地从GUID 维基百科文章中窃取)。这使它成为一个 128 位的数字。现在,它有所有那些烦人的字符,但没有什么能阻止你删除无关字符并从十六进制转换并将其视为纯数字。

出于实际原因,您需要注意 128 位数字在某些语言(例如 C99)中有点笨拙。但是您仍然可以使用编译器扩展(GCC 有__uint128_t)或以其他方式处理它。

于 2012-04-13T20:31:47.537 回答