44.double dice roll

做~自己de王妃 提交于 2019-12-30 18:08:46

问题描述

解决骰子滚动后,我们已经知道如何将介于0.0和1.0之间的小数值转换为特定范围内的整数-例如,转换为介于1和6之间的数值,以模拟掷骰子。
但是,许多编程语言(例如C / C ++,PHP,Pascal)都使用随机数生成器,而随机数生成器仅给出从0到最大最大值之间的整数值。如何将这些数字转换为骰子点?
碰巧这种情况更简单。我们可以使用以下方法:
将随机值R除以N(我们想要的不同值的数量-例如,骰子为6),然后取剩余的值。该余数必须是0到N-1范围内的整数。
现在将其移至必要的范围,只需加1(即我们想要的范围的最小值)即可,您将获得介于1到N之间的值。
如果N与发生器的最大值相比不够小,则此方法的精度不太高。但是,对于大多数日常需求(扔硬币,掷骰子,洗牌等)都可以。
为了进行练习,让我们继续以下练习:

1输入数据将在第一行中包含测试用例(掷骰子)的数量。
2接下来的行将具有测试用例,每个用例都由两个随机整数组成,用于抛出一对骰子。这些数字是非负数(从0到大于2,000,000,000的某个值),应使用上面建议的算法将它们转换为骰子点。
3答案应包含一对骰子每次掷出的总和,值之间应用空格隔开
测试案例

input data:
7
193170145 1912748246
753156389 614113621
1824520917 53700559
1288077384 911939603
1939066598 1695763253
1905581606 1811712139
878644967 1090885451


answer:
5 8 6 7 9 5 12

解答

首先进行了测试

a=1090885451%6
print(a)
b=878644967 %6
print(b)

得到结果是5和5,这两个骰子之和是12,则与描述一样每个骰子加1即位随机点数
因此问题很好解决

numInput=input()
for i in range(int(numInput)):
    lineInput=input().split()
    a=int(lineInput[0])%6
    a=a+1
    b=int(lineInput[1])%6
    b=b+1
    print(a+b,end=" ")
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!