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

如何在C#多维数组中查找替换对象?附Bingo卡排重与行校验需求

5×5 Bingo卡实现方案(新手友好版)

一、填充无重复的1-25随机数

你的原代码直接随机生成数字会出现重复,最简单的方法是先把1到25的数字放进列表,打乱顺序后再填充到二维数组,天然避免重复:

// 创建包含1-25的数字列表
List<int> numbers = new List<int>();
for (int num = 1; num <= 25; num++)
{
    numbers.Add(num);
}

// 打乱列表顺序(Fisher-Yates洗牌算法,逻辑简单)
Random rnd = new Random();
for (int i = numbers.Count - 1; i > 0; i--)
{
    int j = rnd.Next(0, i + 1);
    // 交换两个位置的数字
    int temp = numbers[i];
    numbers[i] = numbers[j];
    numbers[j] = temp;
}

// 填充到5×5二维数组
int[,] bingo = new int[5, 5];
int index = 0;
for (int i = 0; i < bingo.GetLength(0); i++)
{
    for (int j = 0; j < bingo.GetLength(1); j++)
    {
        bingo[i, j] = numbers[index];
        index++;
    }
}

这个方法不用额外检查重复,所有数字都是唯一的,比生成一个检查一个更直观。

二、校验用户所选数字是否构成Bingo行

假设用HashSet<int> selectedNumbers存储用户选的数字(查存在性效率高),按以下步骤检查Bingo:

1. 检查每行是否全被选中

bool hasBingo = false;

// 遍历每行
for (int i = 0; i < 5; i++)
{
    bool rowComplete = true;
    for (int j = 0; j < 5; j++)
    {
        if (!selectedNumbers.Contains(bingo[i, j]))
        {
            rowComplete = false;
            break; // 有一个没选中,直接跳出该行检查
        }
    }
    if (rowComplete)
    {
        hasBingo = true;
        break;
    }
}

2. 检查每列是否全被选中

如果行检查没找到Bingo,继续检查列:

if (!hasBingo)
{
    for (int j = 0; j < 5; j++)
    {
        bool colComplete = true;
        for (int i = 0; i < 5; i++)
        {
            if (!selectedNumbers.Contains(bingo[i, j]))
            {
                colComplete = false;
                break;
            }
        }
        if (colComplete)
        {
            hasBingo = true;
            break;
        }
    }
}

3. 检查两条对角线是否全被选中

如果行列都没找到,检查对角线:

if (!hasBingo)
{
    // 左上到右下的主对角线
    bool diag1Complete = true;
    for (int i = 0; i < 5; i++)
    {
        if (!selectedNumbers.Contains(bingo[i, i]))
        {
            diag1Complete = false;
            break;
        }
    }
    if (diag1Complete)
    {
        hasBingo = true;
    }
    else
    {
        // 右上到左下的副对角线
        bool diag2Complete = true;
        for (int i = 0; i < 5; i++)
        {
            if (!selectedNumbers.Contains(bingo[i, 4 - i]))
            {
                diag2Complete = false;
                break;
            }
        }
        hasBingo = diag2Complete;
    }
}

最后hasBingo为true就说明用户达成了Bingo。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:16:15