C++ 微信红包程序实现:公平分配吉利红包

本程序旨在使用 C++ 编程语言实现一个微信红包程序,将给定的金额拆分成多个吉利数字红包,并以相对均匀的方式分配给指定人数。程序考虑了吉利数字、金额分配和随机打乱等因素,力求实现公平的红包分配。

思路:

  1. 定义一个函数,用于生成吉利数的数组,该函数返回一个vector<double>类型的值。
  2. 定义一个函数,用于计算每个红包的金额,该函数返回一个vector<double>类型的值。
  3. 定义一个函数,用于分配红包金额给每个人,该函数返回一个vector<double>类型的值。
  4. main函数中,读入钱数 m 和发红包人数 n,调用以上三个函数,输出每个人分到的红包数。

代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
#include <cmath>

using namespace std;

// 生成吉利数的函数
vector<double> generateLuckyNumbers() {
    vector<double> luckyNumbers {
        1.66, 1.68, 16.8, 1.78, 17.8, 1.88, 18.8, 1.99,
        5.20, 0.66, 6.6, 6.66, 0.08, 0.88, 8.8, 8.88,
        0.99, 9.9, 9.99
    };
    return luckyNumbers;
}

// 计算每个红包的金额
vector<double> calculateRedPacketAmounts(double totalAmount, int numPackets) {
    vector<double> luckyNumbers = generateLuckyNumbers();
    vector<double> amounts;
    double sumAmounts = 0;
    for (int i = 0; i < numPackets; i++) {
        double amount = luckyNumbers[i % luckyNumbers.size()];
        amounts.push_back(amount);
        sumAmounts += amount;
    }
    double scale = totalAmount / sumAmounts;
    for (int i = 0; i < numPackets; i++) {
        amounts[i] *= scale;
    }
    return amounts;
}

// 分配红包金额给每个人
vector<double> distributeRedPacketAmounts(vector<double> amounts, int numPeople) {
    random_device rd;
    mt19937 gen(rd());
    shuffle(amounts.begin(), amounts.end(), gen);
    vector<double> perPersonAmounts(numPeople);
    int idx = 0;
    for (int i = 0; i < amounts.size(); i++) {
        perPersonAmounts[idx++] += amounts[i];
        if (idx >= numPeople) {
            idx = 0;
        }
    }
    return perPersonAmounts;
}

int main() {
    double totalAmount;
    int numPackets;
    cin >> totalAmount >> numPackets;
    vector<double> amounts = calculateRedPacketAmounts(totalAmount, numPackets);
    vector<double> perPersonAmounts = distributeRedPacketAmounts(amounts, numPackets);
    for (int i = 0; i < perPersonAmounts.size(); i++) {
        cout << "Person " << i+1 << " gets " << round(perPersonAmounts[i]) << " yuan." << endl;
    }
    return 0;
}

代码解释:

  • generateLuckyNumbers() 函数用于生成一个包含预设吉利数字的 vector
  • calculateRedPacketAmounts() 函数首先根据红包数量从吉利数字数组中选择合适的数字,并计算每个红包的金额。然后,根据总金额和红包金额总和,进行比例调整,确保红包金额总和等于总金额。
  • distributeRedPacketAmounts() 函数首先使用随机数生成器随机打乱红包金额数组,然后按照轮流分配的方式将红包金额分配给每个人。
  • main 函数用于读取总金额和红包数量,调用以上函数进行红包分配,并输出每个人的红包金额。

使用方法:

  1. 将代码保存为 .cpp 文件。
  2. 使用 C++ 编译器编译代码,例如 g++ redpacket.cpp -o redpacket
  3. 运行可执行文件,例如 ./redpacket
  4. 在提示符中输入总金额和红包数量,程序将输出每个人的红包金额。

注意:

  • 由于吉利数字的设定和随机分配,每个人的红包金额可能略有不同。
  • 程序仅作为示例,实际应用中可能需要根据具体需求进行调整。
C++ 微信红包程序实现:公平分配吉利红包

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

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