รบกวนโปรแกรมเมอร์ หรือ ท่านที่เข้าใจเรื่องการสุ่มตัวเลข ช่วยแนะนำ หน่อยครับ

public static (int a, int b) GenerateSiblingIntegerPair(int min, int max, double maxPercent, bool allowEqual = true)
{
    if (min >= max)
        throw new ArgumentException("min must be less than max");
    if (maxPercent <= 0)
        throw new ArgumentException("maxPercent must be > 0");

    // 1. สุ่มค่าแรก (a)
    int a = GenerateRandomNumber(min, max + 1);

    // 2. คำนวณช่วงของ b โดยอิงจาก a และ maxPercent
    double delta = a * maxPercent;
    int bMin = (int)Math.Max(min, Math.Ceiling(a - delta));
    int bMax = (int)Math.Min(max, Math.Floor(a + delta));

    // 3. Fallback กรณีช่วงแคบเกินไป (เช่น a มีค่าน้อยมาก)
    if (bMin > bMax)
    {
        bMin = Math.Max(min, a - 1);
        bMax = Math.Min(max, a + 1);
    }

    // 4. สุ่มค่า b
    int b = GenerateRandomNumber(bMin, bMax + 1);

    // 5. ถ้าไม่ยอมให้ a == b และช่วงกว้างพอ ให้สุ่มใหม่จนกว่าจะไม่ซ้ำ
    if (!allowEqual && a == b && bMin < bMax)
    {
        while (a == b)
        {
            b = GenerateRandomNumber(bMin, bMax + 1);
        }
    }

    return (a, b);
}

จากโค้ดเหมือนมันยังได้ค่าไม่โดนใจนักครับ





โดยโค้ดใช้งานประมาณนี้
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้

ถ้าอยากให้ตัวเลขใกล้เคียงกันมากกว่านี้ ต้องแก้ที่จุดไหน ครับ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่