C++抽奖系统:实现随机抽取奖品的完整代码

想用C++做一个公平公正的抽奖系统?没问题!这篇文章提供了一个简单易懂的C++抽奖系统代码,可以设置多种奖品,并实现随机抽取,并在控制台输出中奖信息。

#include <iostream>
#include <vector>
#include <random>
#include <chrono>

// 定义奖品结构体
struct Prize {
    std::string name;
    int quantity;
};

// 初始化奖品列表
std::vector<Prize> initializePrizes() {
    std::vector<Prize> prizes;
    
    // 添加奖品,可以根据需要自行修改和扩展
    Prize prize1 = { '奖品1', 5 };
    Prize prize2 = { '奖品2', 3 };
    Prize prize3 = { '奖品3', 2 };
    
    prizes.push_back(prize1);
    prizes.push_back(prize2);
    prizes.push_back(prize3);
    
    return prizes;
}

// 抽奖函数
void drawPrize(std::vector<Prize>& prizes) {
    std::random_device rd;
    std::mt19937 gen(rd());
    
    // 计算奖品总数
    int totalPrizes = 0;
    for (const auto& prize : prizes) {
        totalPrizes += prize.quantity;
    }
    
    if (totalPrizes > 0) {
        std::uniform_int_distribution<> dis(1, totalPrizes);
        int chosenNumber = dis(gen);
        
        // 根据随机数选择奖品
        int accumulatedPrizes = 0;
        for (auto& prize : prizes) {
            accumulatedPrizes += prize.quantity;
            if (chosenNumber <= accumulatedPrizes) {
                std::cout << '恭喜你中得奖品:' << prize.name << std::endl;
                prize.quantity--;
                break;
            }
        }
    } else {
        std::cout << '很抱歉,奖品已经抽完了!' << std::endl;
    }
}

int main() {
    std::vector<Prize> prizes = initializePrizes();
    
    // 设置随机数生成器的种子为当前时间以获取更好的随机性
    std::srand(std::chrono::system_clock::now().time_since_epoch().count());
    
    // 模拟抽奖
    for (int i = 0; i < 10; i++) {
        std::cout << '第 ' << i+1 << ' 次抽奖结果:' << std::endl;
        drawPrize(prizes);
        std::cout << std::endl;
    }
    
    return 0;
}

代码解释:

  1. 定义奖品结构体: Prize 结构体包含奖品名称 (name) 和数量 (quantity)。
  2. 初始化奖品列表: initializePrizes 函数用于初始化奖品列表,可以根据需要添加或修改奖品信息。
  3. 抽奖函数: drawPrize 函数负责随机抽取奖品。
    • 首先,计算所有奖品的总数。
    • 然后,使用 std::uniform_int_distribution 生成一个随机数,范围在 1 到奖品总数之间。
    • 最后,遍历奖品列表,根据随机数确定中奖的奖品,并输出中奖信息。
  4. 主函数: main 函数中演示了如何使用 drawPrize 函数进行抽奖。

改进之处:

  • 使用 <chrono> 库中的当前时间来设置随机数生成器的种子,以增加随机性。
  • 使用 std::srand 函数来设置随机数生成器的种子。
  • prizes 向量中的奖品设为非常量引用,以便在抽奖函数中修改奖品数量。

你可以根据自己的需求对代码进行修改和扩展,例如添加用户界面、数据库连接等功能。

C++抽奖系统:实现随机抽取奖品的完整代码

原文地址: https://www.cveoy.top/t/topic/N1w 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录