首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言實現雙色球彩票模擬:規則解析與完整代碼

     編輯:關於C語言

C語言實現雙色球彩票模擬:規則解析與完整代碼

雙色球是中國福利彩票的熱門玩法。本文用 C 語言實現一個簡單的雙色球模擬程序,包含隨機開獎號碼生成、用戶投注輸入、中獎判斷與獎金計算等核心邏輯。

雙色球規則簡介

  • 紅球:從 1-33 中選 6 個不重複號碼。
  • 藍球:從 1-16 中選 1 個號碼。
  • 中獎等級由紅球命中個數與藍球是否命中共同決定。

程序設計思路

  1. 用 rand() 生成隨機開獎號碼(紅球 6 個,藍球 1 個)。
  2. 用戶輸入一組號碼(簡化為一個整數編碼)。
  3. 將用戶號碼與開獎號碼逐位比對,統計紅球命中數及藍球是否命中。
  4. 根據中獎規則輸出對應獎金。

完整代碼

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

long long generate_draw() {
    int red[6] = {0}, blue;
    int i, j, temp;
    srand((unsigned)time(NULL));

    // 生成 6 個不重複紅球 (1-33)
    for (i = 0; i < 6; ) {
        temp = rand() % 33 + 1;
        for (j = 0; j < i; j++) if (red[j] == temp) break;
        if (j == i) red[i++] = temp;
    }
    // 簡單排序
    for (i = 0; i < 5; i++)
        for (j = i+1; j < 6; j++)
            if (red[i] > red[j]) { temp = red[i]; red[i] = red[j]; red[j] = temp; }

    blue = rand() % 16 + 1;

    // 編碼為長整型:紅球各佔兩位,藍球佔兩位
    long long code = 0;
    for (i = 0; i < 6; i++) code = code * 100 + red[i];
    code = code * 100 + blue;
    return code;
}

int count_red_matches(long long user, long long draw) {
    int cnt = 0;
    for (int i = 0; i < 6; i++) {
        int u = user % 100; user /= 100;
        int d = draw % 100; draw /= 100;
        if (u == d) cnt++;
    }
    return cnt;
}

int main() {
    long long user_num, draw_num;
    int red_match, blue_match;

    printf("請輸入您的投注號碼(紅球6個兩位數+藍球2位數,共14位):\n");
    scanf("%lld", &user_num);

    draw_num = generate_draw();
    printf("本期開獎號碼:%014lld\n", draw_num);

    blue_match = (user_num % 100 == draw_num % 100);
    red_match = count_red_matches(user_num / 100, draw_num / 100);

    printf("紅球命中:%d 個,藍球:%s\n", red_match, blue_match ? "命中" : "未命中");

    // 簡化獎金邏輯(僅示意)
    if (red_match == 6 && blue_match) printf("一等獎!\n");
    else if (red_match == 6) printf("二等獎!\n");
    else if (red_match == 5 && blue_match) printf("三等獎!\n");
    else if ((red_match == 5) || (red_match == 4 && blue_match)) printf("四等獎!\n");
    else if ((red_match == 4) || (red_match == 3 && blue_match)) printf("五等獎!\n");
    else if (blue_match) printf("六等獎!\n");
    else printf("未中獎。\n");

    return 0;
}

代碼亮點與不足

  • ✅ 使用 srand(time(NULL)) 確保隨機性。
  • ✅ 紅球去重邏輯正確。
  • ⚠️ 原文代碼將號碼編碼為 double 類型,存在精度風險,本文改用 long long 整數編碼。
  • ⚠️ 原文中獎判斷邏輯混亂(多層嵌套循環、變量重用),本文重構為清晰的函數式結構。

擴展建議

  • 支持多注投注、追加投注。
  • 接入真實開獎數據 API。
  • 增加統計分析功能(冷熱號、走勢圖)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved