问题描述
解决骰子滚动后,我们已经知道如何将介于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=" ")
来源:CSDN
作者:#楚歌
链接:https://blog.csdn.net/weixin_39289876/article/details/103767818