public static void Main()
{
List<int> ints = new List<int>();
ints.Add(100);ints.Add(200);ints.Add(300);ints.Add(400);
ints.Add(500);ints.Add(600);ints.Add(700);ints.Add(600);
//分配比例
float[] avg = new float[3];
avg[0] = 1; avg[1] = 3; avg[2] = 4;
//比例计算
int[] save = new int[avg.Length];
//
List<int> lis = new List<int>();
int total = 0;
int totalavg = 0;
foreach (int a in ints)
{
total += a;
}
foreach (int a in avg)
{
totalavg += a;
}
List<int> counts1 = new List<int>();
SumAdd(avg[0] / totalavg * total, ref ints,ref counts1);
List<int> counts2 = new List<int>();
SumAdd(avg[1] / totalavg * total, ref ints, ref counts2);
List<int> counts3 = new List<int>();
SumAdd(avg[2] / totalavg * total, ref ints, ref counts3);
}
public void SumAdd(float finalSum, ref List<int> ints, ref List<int> counts)
{
if (finalSum > ints[0])
{
int ReM = -1;
for (int i = ints.Count -1; i >= 0; i--)
{
if (finalSum >= ints[i])
{
finalSum -= ints[i];
counts.Add(ints[i]);
ReM = i;
break;
}
}
if (ReM != -1)
{
ints.RemoveAt(ReM);
}
SumAdd(finalSum,ref ints,ref counts);
}
}