需求 : 已知 n个骰子, 要投掷出来的点数综合为m,返回一个数组长度为n的数组,结果为每个骰子的点数。
骰子的点数范围为1-6。
m>=n && m<=n*6
思路
限制要求, 每个骰子的点数必须是大于等于1,小于等于6
对于最小的临界的处理方法是,在初始状态下,对应数组的初始数字就设置为1
对于最大的临界,就是限制最大的点数6
因为总数为m,那么我就遍历m-n次(初始的数字已经添加了1),每次我都随机取一个数组中的index,对数字加1,这个时候要进行最大值的限定处理
int number; //最终的数 m
private int[] GetNumbers(int num) //num 为骰子数量
{
if (num > number)
{
Debug.LogError("The target number is smaller than dic numbers");
return null;
}
int[] array = new int[num];
for (int i = number - num; i > 0; i--)
{
array = AddNum(array, num);
}
for (int i = 0; i < num; i++)
{
array[i]++;
}
return array;
}
private int[] AddNum(int[] array,int max)
{
int ram = Random.Range(0, max);
if (array[ram] == 5)
{
AddNum(array, max);
}
else
{
array[ram]++;
}
return array;
}
你们如果有好的思路欢迎讨论~~
一起刷题呀~~ 欢迎一起交流
QQ群 :665343902