面试题——整理背包
作者:互联网
/// <summary>
/// 背包整理是游戏中常用的逻辑,将玩家目前背包中的所有格子,按照ID排序统一摆放,同时每个格子中的道具数量不能超过20.
/// 输入
/// [[100,4], [101, 5], [0, 0], [100, 5], [101, 8]],20
/// 输出
/// [[100, 9],[101,13]]
/// 说明正常的整理
/// </summary>
/// <param name="vtBag"></param>
/// <param name="maxStack"></param>
/// <returns></returns>
public List<List<int>> TidyBag(List<List<int>> vtBag, int maxStack) {
List<List<int>> bag = new List<List<int>>();
for (int i = 0; i < vtBag.Count; i++) {
if (vtBag[i][0] != 0) {
int index = HasItem(vtBag[i][0], bag);
if (index == -1) {
bag.Add(vtBag[i]);
} else {
bag[index][1] += vtBag[i][1];
}
}
}
bag.Sort((a, b) => { return a[0] > b[0] ? 1 : -1; });//对bag排序
List<List<int>> lastBag = new List<List<int>>();
foreach (List<int> item in bag) {
if (item[1] > maxStack) {
//Console.WriteLine()
int i = 0;
for (; i < item[1] / maxStack; i++) {
lastBag.Add(new List<int> { item[0], maxStack });
}
lastBag.Add(new List<int> { item[0], item[1] % maxStack });//多余的
} else {
lastBag.Add(item);
}
}
return lastBag;
}
public int HasItem(int id, List<List<int>> bag) {//判断是否存在
for (int i = 0; i < bag.Count; i++) {
if (bag[i][0] == id) {
return i; //存在返回index
}
}
return -1; //返回-1则无此项
}
标签:vtBag,面试题,背包,item,int,List,maxStack,bag,整理 来源: https://blog.csdn.net/ZuoXuanZuo/article/details/117931262