62,046
社区成员
发帖
与我相关
我的任务
分享
ArrayList needs=new ArrayList();
#region 加载测试数据
for (int i = 0; i < 5; i++)
{
needs.Add(3);
}
for (int i = 0; i < 7; i++)
{
needs.Add(1.55);
}
for (int i = 0; i < 9; i++)
{
needs.Add(1.66);
}
#endregion
//从大到小排序
IComparer myComperMethod = new comper();
needs.Sort(myComperMethod);
string result = string.Empty;
//迭代方法
for (int i = 0; i < needs.Count; )
{
double temp =double.Parse(needs[i].ToString());
ArrayList tempResult = new ArrayList();
tempResult.Add(needs[i]);
needs.RemoveAt(i);
for (int j = 0; j < needs.Count; )
{
if (temp + double.Parse(needs[j].ToString()) > 6)
{
j++;
}
else
{
temp += double.Parse(needs[j].ToString());
tempResult.Add(needs[j]);
needs.RemoveAt(j);
}
}
//记录结果
for (int k= 0; k < tempResult.Count; k++)
{
result += tempResult[k].ToString() + ",";
}
result += "<br>";
}
Response.Clear();
Response.Write(result);
Response.End();
//排序方法
public class comper : IComparer
{
int IComparer.Compare(object a, object b)
{
float flotA = 0, flotB = 0;
bool isFloat = float.TryParse(a.ToString(), out flotA) && float.TryParse(b.ToString(), out flotB);
if (!isFloat)
{
return -string.Compare(a.ToString(), b.ToString(), false);
}
else
{
return flotA == flotB ? 0 : (flotA > flotB ? -1 : 1);
}
}
}
while (l>((Material)s[i]).Materiallen && ((Material)s[i]).MaterialCount>0)
改成
while (l>=((Material)s[i]).Materiallen && ((Material)s[i]).MaterialCount>0)
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
ArrayList s=new ArrayList();
Material myMaterial=new Material();
myMaterial.Materiallen=3.00;
myMaterial.MaterialCount=5;
s.Add(myMaterial);
myMaterial=new Material();
myMaterial.Materiallen=1.66;
myMaterial.MaterialCount=9;
s.Add(myMaterial);
myMaterial=new Material();
myMaterial.Materiallen=1.55;
myMaterial.MaterialCount=7;
s.Add(myMaterial);
//s.Sort(); //排序
Double l=6; //材料长度
int lc=0; //使用材料数
int tolc=0; //剩余成品数;
int i=0;
while (true)
{
i=0;
l=6;
tolc=0;
while(i<s.Count) //对每根材料(6m)进行一次堆分
{
while (l>((Material)s[i]).Materiallen && ((Material)s[i]).MaterialCount>0)
{
l-=((Material)s[i]).Materiallen;
((Material)s[i]).MaterialCount-=1;
}
i++;
if (i==s.Count)
{
lc++;
break;
}
}
//计算剩余成品数
for (int j=0;j<s.Count;j++) tolc+=((Material)s[j]).MaterialCount;
if (tolc==0) break;
}
Response.Write(lc);
}
public class Material
{
private Double _Materiallen;
private int _MaterialCount;
public Double Materiallen
{
set{ _Materiallen=value;}
get{return _Materiallen;}
}
public int MaterialCount
{
set{ _MaterialCount=value;}
get{return _MaterialCount;}
}
}