雙色球是中國福利彩票的熱門玩法。本文用 C 語言實現一個簡單的雙色球模擬程序,包含隨機開獎號碼生成、用戶投注輸入、中獎判斷與獎金計算等核心邏輯。
rand() 生成隨機開獎號碼(紅球 6 個,藍球 1 個)。#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 整數編碼。