[LeetCode-455]基于贪心算法的分发饼干问题的求解(C语言版)

/*

题目出处:LeetCode

题目序号:455. 分发饼干

题目叙述:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是满足尽可能多的孩子,并输出这个最大数值。

*/

程序清单

#include <stdio.h>

// 冒泡排序

void bubble_sort(int *a, int length) {

int i, j, temp;

for (i = 0; i < length - 1; i++){

for (j = 0; j < length - 1 - i; j++){

if (a[j] > a[j + 1]) {

temp = a[j];

a[j] = a[j + 1];

a[j + 1] = temp;

}

}

}

}

// 分发饼干

int SplitBiscuit(int *s, int *g,int m, int n) {

int i = 0; // i 是饼干形状数组位标索引

int j = 0; // j 是孩子胃口数组位标索引

bubble_sort(s, m); // 对饼干形状数组排序

bubble_sort(g, n); // 对孩子胃口数组排序

for(i=0; i<m; i++) {

if(j<n && s[i]>=g[j]){

j++; // 如果可分发,位标移向下一个,否则不移动孩子

}

}

return j;

}

int main() {

int m,n,i;

printf("请输入饼干的数量:\n");

scanf("%d",&m);

int s[m];

printf("请输入每块饼干的尺寸大小:\n");

for (i=0; i<m; i++) {

scanf("%d",&s[i]);

}

printf("请输入孩子的数量:\n");

scanf("%d",&n);

int g[m];

printf("请输入每个孩子的胃口大小:\n");

for (i=0; i<n; i++) {

scanf("%d",&g[i]);

}

printf("一共可以满足 %d 个孩子的需求。\n",SplitBiscuit(s, g, m, n));

return 0;

}

运行结果

相关推荐
xiaoye-duck几秒前
《算法题讲解指南:优选算法-分治-快排》--45.数组中的第k个最大元素,46.最小的k个数
c++·算法
SCBAiotAigc几秒前
2026.3.7:具身智能之51单片机<二>:ISP烧录过程
c++·人工智能·单片机·嵌入式硬件·51单片机·c
Galerkin码农选手6 分钟前
per_tenor_quant_fp8和per_token_quant_fp8算法解读
人工智能·pytorch·算法
tankeven6 分钟前
HJ125 最大最小路
c++·算法
MegaDataFlowers7 分钟前
认识复杂度和简单排序算法
java·算法·排序算法
MSTcheng.8 分钟前
【算法】前缀和:『560. 和为 K 的子数组 & 1314.矩阵区域和』
线性代数·算法·矩阵
梦游钓鱼9 分钟前
Timestamp.cc和Timestamp.h文件分析
开发语言·c++
luckycoding12 分钟前
739. 每日温度
算法·leetcode·职场和发展
一只黑鸟12 分钟前
基于STM32的罐装水泥成分实时检测系统设计与实现(含有matlab仿真)
stm32·嵌入式硬件·算法·matlab·毕设
十年编程老舅13 分钟前
Linux GDB 调试超详细教程:入门 + 实战
linux·c++·gdb