zhuaizhai 2024-03-03 16:32 采纳率: 90.5%
浏览 19
已结题

C语言解决红包分配问题

C语言编写代码,编写程序,模拟系统发拼手气红包。提交源代码文件。红包个数(m)红包总金额(total)红包文字内容(info)
好友个数n(暂时m=n)
发给好友的红包金额满足下面条件:
不少于n个好友平均分配获得金额的三分之一不多于n个好友平均分配获得金额的两倍确保每个好友都可获得一个红包,金额按降序排列

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-03-03 16:32
    关注

    zhuaizhai 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    以下是解决红包分配问题的C语言代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    // 定义红包结构体
    typedef struct {
        double amount;
        char *info;
    } RedEnvelope;
    
    // 按红包金额降序排列
    int cmp(const void *a, const void *b) {
        RedEnvelope *envelopeA = (RedEnvelope *)a;
        RedEnvelope *envelopeB = (RedEnvelope *)b;
        
        if (envelopeA->amount < envelopeB->amount) {
            return 1;
        } else if (envelopeA->amount > envelopeB->amount) {
            return -1;
        } else {
            return 0;
        }
    }
    
    int main() {
        int m, n;
        double total;
        
        // 输入红包个数、红包总金额和好友个数
        printf("请输入红包个数:");
        scanf("%d", &m);
        
        printf("请输入红包总金额:");
        scanf("%lf", &total);
        
        printf("请输入好友个数:");
        scanf("%d", &n);
        
        // 创建红包数组
        RedEnvelope *envelopes = (RedEnvelope *)malloc(m * sizeof(RedEnvelope));
        
        // 随机生成红包金额并计算平均金额
        double average = total / n;
        
        // 生成红包金额并按降序排列
        for (int i = 0; i < m; i++) {
            // 随机生成红包金额,并确保在三分之一和两倍之间
            do {
                envelopes[i].amount = ((double)rand() / RAND_MAX) * total;
            } while (envelopes[i].amount < average / 3 || envelopes[i].amount > average * 2);
            
            // 为红包分配固定的文字内容
            envelopes[i].info = "恭喜发财!";
        }
        
        qsort(envelopes, m, sizeof(RedEnvelope), cmp);
        
        // 输出每个好友获得的红包金额和红包文字内容
        for (int i = 0; i < n; i++) {
            printf("第%d个好友获得%.2f元红包,内容为:%s\n", i + 1, envelopes[i].amount, envelopes[i].info);
        }
        
        // 释放内存
        free(envelopes);
        
        return 0;
    }
    

    解决方案:

    1. 首先,定义一个红包结构体,包含红包金额和红包文字内容。

    2. 获取用户输入的红包个数、红包总金额和好友个数。

    3. 创建红包数组,并随机生成红包金额,并确保每个红包金额在三分之一和两倍之间。

    4. 按红包金额降序排列红包数组。

    5. 输出每个好友获得的红包金额和红包文字内容。

    6. 释放红包数组的内存。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月14日
  • 已采纳回答 3月6日
  • 创建了问题 3月3日