CSP题目:小明分蛋糕
-数据结构题目
题目:小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。
算法思想:先对蛋糕按重量进行排序,然后依次分发。定义一个中间量计算当前这位朋友拿到的蛋糕重量,当大于或等于k时,停止分发,转向下一个朋友,同时中间量清零。结束时,若剩下最后一位朋友的蛋糕不大于k,则人数也要加一。
C++代码如下:
#include <iostream>
#include <stdlib.h>
using namespace std;
#define ListInitSize 16 //初次分配空间大小
#define ListIncrement 8 //空间分配增量大小
typedef struct List
{
int *pData; //动态存储空间的基地址
int length; //存储数据元素的个数
int size; //当前已分配的存储空间的大小
}List;
void InitList( List &L )
{
//初始化顺序表
cout<<"-进行初始化操作-"<<endl;
L.pData = (int *)malloc(ListInitSize * sizeof(int)); //申请存储空间
if( L.pData == NULL )
exit(1); //存储空间申请失败
L.size = ListInitSize;