我需要创建五个随机整数(比如rand(1,5)
)。然后,我根据这些数字生成一个分数。例如,如果我得到1,2,3,4,5
的结果,那么这将等于零分,但如果我得到1,1,3,4,5
,那么我将有一对1,2,3,4,5 = score 0
1,1,2,3,4 = score 1 (1 pair)
1,1,2,2,4 = score 2 (2 pair)
1,1,1,3,4 = score 3 (3 of a kind)
1,1,1,1,5 = score 4 (4 of a kind)
1,1,1,3,3 = score 5 (full house)
1,1,1,1,1 = score 6 (5 of a kind)
。与扑克类似的得分类似,因此五个相同的数字将是“满堂红”,从而获得最高分。
我如何评价评分系统,即使它只是数学方程?
更多细节:
1-5将保留单独的图像,然后将与“众议院”进行战斗,“众议院”将为用户提供相同的代码以确定获胜者。以下是一些示例抽奖和他们将获得的分数:
if (isset($_POST['play'])) {
$rand1 = rand(1, 5);
$rand2 = rand(1, 5);
$rand3 = rand(1, 5);
$rand4 = rand(1, 5);
$rand5 = rand(1, 5);
if ($_POST['bet'] <= $user_data['coins']) {
if ($_POST['bet'] < 999999999) {
if ($_POST['bet'] > 0.99) {
if ($user_data['coins'] >= 1) {
$array = array($rand1,$rand2,$rand3,$rand4,$rand5);
print_r(array_count_values($array));
echo $rand1.', '.$rand2.', '.$rand3.', '.$rand4.', '.$rand5;
Array( // Here I don't understand
1 => 3,//
2 => 1,//
3 => 1 //
);
}
}
}
}
}
如果他们得分为6并且房子得分为6,则数字组合是不敬的。这是一个平局。
{{1}}
这输出;数组([5] =&gt; 2 [4] =&gt; 2 [1] =&gt; 1)5,5,4,4,1
答案 0 :(得分:5)
使用array_count_value函数。
$array = array(1,1,1,2,5);
print_r(array_count_values($array));
Array(
1 => 3,
2 => 1,
3 => 1
);
答案 1 :(得分:1)
如果范围很小,您可以使用计数排序方法。对于每个数字,提供一个“桶”来计算数字出现的次数。扫描一次以填充存储桶。然后另一次扫描,但这次反对斗得到最高值。这是你的分数。
答案 2 :(得分:1)
这是我考虑的方法,基于@Lele的回答。警告:这有点令人困惑,所以请坐下来喝一杯茶。
所以,如果你的分数如此:
1 1 2 2 4
然后你的第一个桶是:
2 2 0 1 0
那是因为你有两个,两个两个,一个四个。你的第二桶是:
1 2 0 0 0
那是因为你有两个两个计数,一个一个计数。在这里,你忽略了第一个位置(因为一个东西的一个计数没有得分)和其他人的得分。所以,测试两个二,并得分那两个。
如果你得分是这样的:
5 5 5 5 1
然后你的第一个桶是:
1 0 0 0 4
这是一,四,五。所以你的第二个桶是:
1 0 0 1 0
您的查找表可能是:
x 1 0 0 0 -> one pair
x 2 0 0 0 -> two pairs
x 0 1 0 0 -> three of a kind
x 1 1 0 0 -> full house
x 0 0 1 0 -> four of a kind
x 0 0 0 1 -> five of a kind
'x'表示您不匹配。因此,您的查找表将四个数字与分数匹配。
我对这个问题很感兴趣,所以我写了一些代码来做上面的事情。你仍然需要做查找表,但这是相对微不足道的,对你来说将是一个很好的做法。这是一个演示,带有注释(run code here):
<?php
function counting(array $array) {
// Input figures
print_r($array);
// Run the figures twice through the bucket-counter
$firstBuckets = bucketCounter($array);
$secondBuckets = bucketCounter($firstBuckets);
// Ignore counts of 1
array_shift($secondBuckets);
// Output, just need to do the lookup now
echo ' converts to ';
print_r($secondBuckets);
echo "<br />";
}
/**
* Bucket counter
*/
function bucketCounter(array $array) {
$result = array(0, 0, 0, 0, 0, );
foreach($array as $value) {
if ($value > 0) {
$result[$value - 1]++;
}
}
return $result;
}
// Try some demos here!
counting(array(1, 2, 3, 4, 5));
counting(array(1, 1, 2, 4, 2));
counting(array(1, 1, 1, 1, 1));
?>
我所包含的演示似乎有效,但是要寻找错误!