我从你的问题中了解到,你想用强度来产生概率,比如绿色比红色更可能发生等等......这个问题与 iOS 或 iPhone 开发无关,它是纯粹的编程问题,我没有不要认为只有一种解决方案。这是我的解决方案,我通常想使用简单的解决方案。
在发布代码之前,我想解释一下我的想法。这道题和我们高中时学过的概率题类似,所以我就用同样的方法来解答。我也会使用你的号码。因此,假设您有一个包含 23 个红球、85 个绿球、10 个黄球和 50 个蓝球的盒子。所有这些球都在一个盒子里,你必须从盒子里随机选择一个球,因此红色的概率是 0.23,绿色的概率是 0.85...
这是我的彩球盒:
char apples[] = {'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'b', 'b', 'b', 'b', 'b', 'r', 'r', 'y', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'b', 'b', 'b', 'b', 'b', 'r', 'r', 'y', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'b', 'b', 'b', 'b', 'b', 'r', 'r', 'y', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'b', 'b', 'b', 'b', 'b', 'r', 'r', 'y', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'b', 'b', 'b', 'b', 'b', 'r', 'r', 'y', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'b', 'b', 'b', 'b', 'b', 'r', 'r', 'y', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'b', 'b', 'b', 'b', 'b', 'r', 'r', 'y', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'b', 'b', 'b', 'b', 'b', 'r', 'r', 'y', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'b', 'b', 'b', 'b', 'b', 'r', 'r', 'y', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'b', 'b', 'b', 'b', 'b', 'r', 'r', 'y', 'r', 'g', 'g', 'r', 'g', 'g', 'r', 'g'};
您注意到我使用特殊分布将球分布在阵列中。好吧,想象一下使用您的数字的盒子示例。你有 10 个黄球和 85 个绿球,这意味着我希望在每 1 个黄球旁边的框中看到 8 个绿球,同样我希望看到 5 个蓝球和 2 个红球。而且由于绿色是最有可能的,我希望首先看到它。因此,您可以看到我的数组具有以下模式:
'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'b', 'b', 'b', 'b', 'b', 'r', 'r', 'y',
每1个黄色,8个绿色,5个蓝色,2个红色。由于还有一些红色和绿色,我将它们添加到数组的末尾。
现在这个过程非常简单,因为这个集合包含 168 个球,所以我做了一个循环,运行 168 次,每次它生成一个从 0 到 167 的数字。我使用这个数字是数组的索引,apples
我看看我得到了哪个球.
int counters[4] = {0, 0, 0, 0};
int x;
for(int i=0; i<168; i++)
{
x = arc4random()%168;
if(apples[x] == 'r') counters[0]++;
else if(apples[x] == 'g') counters[1]++;
else if(apples[x] == 'y') counters[2]++;
else if(apples[x] == 'b') counters[3]++;
}
NSLog(@"Red: %i%%", counters[0]);
NSLog(@"Green: %i%%", counters[1]);
NSLog(@"Yellow: %i%%", counters[2]);
NSLog(@"Blue: %i%%", counters[3]);
以下是程序在不同执行时的示例输出:
2013-07-04 19:48:54.557 DOS[798:707] Red: 24%
2013-07-04 19:48:54.560 DOS[798:707] Green: 78%
2013-07-04 19:48:54.562 DOS[798:707] Yellow: 11%
2013-07-04 19:48:54.563 DOS[798:707] Blue: 55%
2013-07-04 19:49:04.899 DOS[811:707] Red: 21%
2013-07-04 19:49:04.901 DOS[811:707] Green: 81%
2013-07-04 19:49:04.905 DOS[811:707] Yellow: 9%
2013-07-04 19:49:04.906 DOS[811:707] Blue: 57%
2013-07-04 19:49:15.243 DOS[824:707] Red: 20%
2013-07-04 19:49:15.246 DOS[824:707] Green: 89%
2013-07-04 19:49:15.246 DOS[824:707] Yellow: 8%
2013-07-04 19:49:15.247 DOS[824:707] Blue: 51%
您可以随心所欲地使用阵列来增强结果。