110,538
社区成员
发帖
与我相关
我的任务
分享
///
///参数:
/// Weight:砝码数组(砝码重量不限,重量随机整数)
/// BoxCount:盒子总数
/// 满足条件:
/// 1.每个盒子里面的总重量尽量相等
/// 2.保证盒子两两之间重量的差值所有求和最小
///
AverageEveryBoxWeight(int[] Weight,int BoxCount)
{
//TODO
}
///
///参数:
/// Weight:砝码数组(砝码重量不限,重量随机整数)
/// BoxCount:盒子总数
/// 满足条件:
/// 1.每个盒子里面的总重量尽量相等
/// 2.保证盒子两两之间重量的差值所有求和最小
///
private void AverageEveryBoxWeight(int[] weights, int boxCount)
{
//TODO
//排序
int maxWeight = int.MinValue;
int maxIndex = 0;
for (int i = 0; i < weights.Length -1; i++)
{
maxWeight = weights[i];
maxIndex = i;
for (int j = i + 1; j < weights.Length; j++)
{
if (weights[j] > maxWeight)
{
maxWeight = weights[j];
maxIndex = j;
}
}
if (i != maxIndex)
{
int temp = weights[i];
weights[i] = weights[maxIndex];
weights[maxIndex] = temp;
}
}
List<Box> boxList = new List<Box>();
for (int i = 0; i < boxCount; i++)
{
boxList.Add(new Box());
}
//放到盒子中
int minSum = 0;
int minIndex = 0;
for (int i = 0; i < weights.Length; i++)
{
minSum = int.MaxValue;
for (int j = 0; j < boxCount; j++)
{
if (boxList[j].Sum < minSum)
{
minSum = boxList[j].Sum;
minIndex = j;
}
}
boxList[minIndex].Add(weights[i]);
}
}
public class Box
{
public int Sum
{
get { return _sum; }
}
public void Add(int Num)
{
_boxList.Add(Num);
_sum += Num;
}
private int _sum = 0;
private List<int> _boxList = new List<int>();
}
[/quote]
3, 6, 6, 7, 8 这几个数放两个盘子 最优的是8,7 和6,6,3
但是你程序计算出的是:
盒子:1
总数: 14 里面的砝码分别是:8 6
盒子:2
总数: 16 里面的砝码分别是:7 6 3
[/quote]
我擦,非要最优解么?
不过可以在贪婪算法分配完毕后进行调整。[/quote]
之前我的想法是一样的,但是被上面这个打败,就想到应该有后面的调整,但是就是不知道怎么弄了
///
///参数:
/// Weight:砝码数组(砝码重量不限,重量随机整数)
/// BoxCount:盒子总数
/// 满足条件:
/// 1.每个盒子里面的总重量尽量相等
/// 2.保证盒子两两之间重量的差值所有求和最小
///
private void AverageEveryBoxWeight(int[] weights, int boxCount)
{
//TODO
//排序
int maxWeight = int.MinValue;
int maxIndex = 0;
for (int i = 0; i < weights.Length -1; i++)
{
maxWeight = weights[i];
maxIndex = i;
for (int j = i + 1; j < weights.Length; j++)
{
if (weights[j] > maxWeight)
{
maxWeight = weights[j];
maxIndex = j;
}
}
if (i != maxIndex)
{
int temp = weights[i];
weights[i] = weights[maxIndex];
weights[maxIndex] = temp;
}
}
List<Box> boxList = new List<Box>();
for (int i = 0; i < boxCount; i++)
{
boxList.Add(new Box());
}
//放到盒子中
int minSum = 0;
int minIndex = 0;
for (int i = 0; i < weights.Length; i++)
{
minSum = int.MaxValue;
for (int j = 0; j < boxCount; j++)
{
if (boxList[j].Sum < minSum)
{
minSum = boxList[j].Sum;
minIndex = j;
}
}
boxList[minIndex].Add(weights[i]);
}
}
public class Box
{
public int Sum
{
get { return _sum; }
}
public void Add(int Num)
{
_boxList.Add(Num);
_sum += Num;
}
private int _sum = 0;
private List<int> _boxList = new List<int>();
}
[/quote]
3, 6, 6, 7, 8 这几个数放两个盘子 最优的是8,7 和6,6,3
但是你程序计算出的是:
盒子:1
总数: 14 里面的砝码分别是:8 6
盒子:2
总数: 16 里面的砝码分别是:7 6 3
[/quote]
我擦,非要最优解么?
不过可以在贪婪算法分配完毕后进行调整。
///
///参数:
/// Weight:砝码数组(砝码重量不限,重量随机整数)
/// BoxCount:盒子总数
/// 满足条件:
/// 1.每个盒子里面的总重量尽量相等
/// 2.保证盒子两两之间重量的差值所有求和最小
///
private void AverageEveryBoxWeight(int[] weights, int boxCount)
{
//TODO
//排序
int maxWeight = int.MinValue;
int maxIndex = 0;
for (int i = 0; i < weights.Length -1; i++)
{
maxWeight = weights[i];
maxIndex = i;
for (int j = i + 1; j < weights.Length; j++)
{
if (weights[j] > maxWeight)
{
maxWeight = weights[j];
maxIndex = j;
}
}
if (i != maxIndex)
{
int temp = weights[i];
weights[i] = weights[maxIndex];
weights[maxIndex] = temp;
}
}
List<Box> boxList = new List<Box>();
for (int i = 0; i < boxCount; i++)
{
boxList.Add(new Box());
}
//放到盒子中
int minSum = 0;
int minIndex = 0;
for (int i = 0; i < weights.Length; i++)
{
minSum = int.MaxValue;
for (int j = 0; j < boxCount; j++)
{
if (boxList[j].Sum < minSum)
{
minSum = boxList[j].Sum;
minIndex = j;
}
}
boxList[minIndex].Add(weights[i]);
}
}
public class Box
{
public int Sum
{
get { return _sum; }
}
public void Add(int Num)
{
_boxList.Add(Num);
_sum += Num;
}
private int _sum = 0;
private List<int> _boxList = new List<int>();
}
[/quote]
3, 6, 6, 7, 8 这几个数放两个盘子 最优的是8,7 和6,6,3
但是你程序计算出的是:
盒子:1
总数: 14 里面的砝码分别是:8 6
盒子:2
总数: 16 里面的砝码分别是:7 6 3
///
///参数:
/// Weight:砝码数组(砝码重量不限,重量随机整数)
/// BoxCount:盒子总数
/// 满足条件:
/// 1.每个盒子里面的总重量尽量相等
/// 2.保证盒子两两之间重量的差值所有求和最小
///
private void AverageEveryBoxWeight(int[] weights, int boxCount)
{
//TODO
//排序
int maxWeight = int.MinValue;
int maxIndex = 0;
for (int i = 0; i < weights.Length -1; i++)
{
maxWeight = weights[i];
maxIndex = i;
for (int j = i + 1; j < weights.Length; j++)
{
if (weights[j] > maxWeight)
{
maxWeight = weights[j];
maxIndex = j;
}
}
if (i != maxIndex)
{
int temp = weights[i];
weights[i] = weights[maxIndex];
weights[maxIndex] = temp;
}
}
List<Box> boxList = new List<Box>();
for (int i = 0; i < boxCount; i++)
{
boxList.Add(new Box());
}
//放到盒子中
int minSum = 0;
int minIndex = 0;
for (int i = 0; i < weights.Length; i++)
{
minSum = int.MaxValue;
for (int j = 0; j < boxCount; j++)
{
if (boxList[j].Sum < minSum)
{
minSum = boxList[j].Sum;
minIndex = j;
}
}
boxList[minIndex].Add(weights[i]);
}
}
public class Box
{
public int Sum
{
get { return _sum; }
}
public void Add(int Num)
{
_boxList.Add(Num);
_sum += Num;
}
private int _sum = 0;
private List<int> _boxList = new List<int>();
}
[/quote]
漂亮