You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排序数组使相同数字前置?Yahtzee游戏开发技术求助

Yahtzee游戏排序问题修复与得分判定思路

一、排序代码的核心Bug修复

你的选择排序代码存在三个关键问题,导致无法正确排序含重复数字的数组:

  1. min变量未初始化
    selection函数中,min没有在每次外层循环时设为当前起始索引i,初始值是随机垃圾值,直接导致排序逻辑完全混乱。需要在for (i = 0; i < size - 1; i++)循环内第一行添加min = i;。

  2. 交换函数类型不匹配
    switches函数参数定义为float *,但实际传入的是int类型的数组元素值,不仅类型不兼容,还会导致内存操作错误。需将参数改为int *,调用时传递元素的地址。

  3. 数组越界访问
    main函数中打印数组的循环条件是i < 6,但数组大小为n=5,索引只能到4,越界会读取未知内存数据。需改为i < n。

修复后的完整代码

#include <stdio.h>
#include <stdlib.h>

#define n 5

void switches(int *v, int *m)
{
    int temp = *v;
    *v = *m;
    *m = temp;
}

void selection(int size, int *v)
{
    int min, i, j;

    for (i = 0; i < size - 1; i++) {
        min = i; // 每次外层循环初始化min为当前起始位置
        for (j = i + 1; j < size; j++) {
            if (v[j] < v[min])
                min = j;
        }

        if (min != i)
            switches(&v[i], &v[min]); // 传递元素地址
    }
}

int main(void)
{
    int v[n] = { 2, 1, 3, 3, 3 };
    int m[n] = { 1, 3, 4, 3, 3 };

    selection(n, v);

    for (int i = 0; i < n; i++) // 修正循环条件,避免越界
        printf("The values for the array are:%d\n", v[i]);

    return 0;
}

二、排序后的得分判定思路

数组排序完成后,可利用升序(或降序)的特性,通过简单的条件判断实现各类得分项的判定:

  • 三条:检查是否存在至少三个连续相同的数字,满足以下任意一种即可:

    (v[0] == v[1] && v[1] == v[2]) || 
    (v[1] == v[2] && v[2] == v[3]) || 
    (v[2] == v[3] && v[3] == v[4])
    
  • 四条:检查是否存在至少四个连续相同的数字,满足以下任意一种即可:

    (v[0] == v[1] && v[1] == v[2] && v[2] == v[3]) || 
    (v[1] == v[2] && v[2] == v[3] && v[3] == v[4])
    
  • 满堂红(Full House):需满足“三个相同+两个相同”的结构,同时排除五个数字全相同的情况:

    ((v[0] == v[1] && v[1] == v[2] && v[3] == v[4]) || 
     (v[0] == v[1] && v[2] == v[3] && v[3] == v[4])) && 
     v[0] != v[4]
    
  • Yahtzee(五个相同):直接判断首尾元素是否相等即可(排序后所有元素必相同):

    v[0] == v[4]
    

另外,也可以不用排序,直接通过统计每个骰子数值的出现次数来判定:用一个大小为6的数组(对应骰子1-6点)计数,遍历骰子数组后检查计数数组中是否有值≥3(三条)、≥4(四条)、同时存在3和2(满堂红)、存在5(Yahtzee),这种方法效率更高,适合复杂场景。

内容的提问来源于stack exchange,提问作者G0ld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:50:29