用c语言写一个程序实现在𝑀𝐴𝑋社团里面有𝑁个成员,每个成员都有他独特的学号,第𝑖个成员的学生证表 示为𝑎𝑖,每一个成员的学号两两不同。 因为参与合泰杯比赛和大创,系里分发下来一部分补贴,𝑀𝐴𝑋的现任社长小棉想 将这部分补贴发给现任的𝑀𝐴𝑋成员,补贴有𝐾份,他决定以一定的规则分发这笔 资金给社团成员,他会一直遵循这个规则,直到补贴发放完,规则如下: - 当小棉有𝑁份或者更多的补贴,他会将补贴分发给每一个人 - 否则,当小棉持有𝐾 ′份补贴时,将这𝐾 ′个补贴分发给学号最小的𝐾 ′个人 当所有的补贴都分发完,各个𝑀𝐴𝑋成员有多少份补贴? Input 第一行有两个整数𝑁,𝐾,分别代表成员数量和补贴数量; 第二行有𝑁个整数,表示各个成员的𝑖𝑑,以空格分隔。 Output N 行,按照输入的 id 顺序输出每个成员对应应该得到的补贴。
时间: 2023-02-07 13:43:44 浏览: 103
你可以使用下面的代码来实现上述功能:
#include <stdio.h>
#include <stdlib.h>
// 定义结构体表示社团成员
typedef struct member {
int id; // 学号
int subsidy; // 补贴数量
} Member;
int main() {
int n, k;
scanf("%d %d", &n, &k); // 输入成员数量和补贴数量
Member* members = (Member*)malloc(sizeof(Member) * n); // 动态分配社团成员数组内存空间
for (int i = 0; i < n; i++) {
scanf("%d", &members[i].id); // 输入成员的学号
members[i].subsidy = 0; // 初始化补贴数量
}
// 循环处理补贴分发
while (k > 0) {
if (k >= n) {
// 如果剩余补贴数量大于等于成员数量,则每个成员分到一份补贴
for (int i = 0; i < n; i++) {
members[i].subsidy++;
}
k -= n; // 更新剩余补贴数量
} else {
// 否则,将剩余补贴分到学号最小的k个人
int minId = 0; // 存储当前最小学号
for (int i = 0; i < n; i++) {
if (members[i].id < minId) {
minId = members[i].id;
}
}
for (int i = 0; i < n; i++) {
// 找到学号最小的k个人,将剩余补贴分给他们
if (members[i].id == minId && k > 0) {
members[i].subsidy++;
k--;
}
}
}
}
// 输出每个成员的补贴数量
for (int i = 0; i < n; i++) {
printf("%d\n", members[i].subsidy);
}
free(members); // 释放内存
阅读全文