C语言编写代码,编写程序,模拟系统发拼手气红包。提交源代码文件。红包个数(m)红包总金额(total)红包文字内容(info)
好友个数n(暂时m=n)
发给好友的红包金额满足下面条件:
不少于n个好友平均分配获得金额的三分之一不多于n个好友平均分配获得金额的两倍确保每个好友都可获得一个红包,金额按降序排列
C语言解决红包分配问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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; }解决方案:
-
首先,定义一个红包结构体,包含红包金额和红包文字内容。
-
获取用户输入的红包个数、红包总金额和好友个数。
-
创建红包数组,并随机生成红包金额,并确保每个红包金额在三分之一和两倍之间。
-
按红包金额降序排列红包数组。
-
输出每个好友获得的红包金额和红包文字内容。
-
释放红包数组的内存。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报-