首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一道笔试题,要求两种解法解决方案

2012-01-30 
一道笔试题,要求两种解法已知有Employee类,内有2属性:salary和EmployeeCollection(第二个是一个集合,存储

一道笔试题,要求两种解法
已知有Employee类,内有2属性:salary和EmployeeCollection(第二个是一个集合,存储其直接下属)。
现要求计算一个员工及其下属(直接和间接)的总工资。要求2中方式。我只知道一个递归的,另一种是什么?

[解决办法]
递归还可以分前序、后序呢。

顺便说下出这种题目的公司绝对不是什么有作为的公司。
[解决办法]
没想出来除了递归还有什么好办法。。
[解决办法]
循环啊,用栈
[解决办法]
ds.Tables["table1"].Compute("sum(salary)","").ToString();
db.Employee.Sum(p => p.salary);
db.Employee.Select(o => o.salary).Sum();

[解决办法]
只想到一种递归的:

C# code
  decimal Salary(Employee e)  {    decimal s = e.salary;    if (e.EmployeeCollection != null)    {      foreach (Employee x in e.EmployeeCollection)      {        s += Salary(x);      }    }    return s;  }
[解决办法]
楼上的只计算了三层:本人、直接下属、直接下属的直接下属,第四层以后的都没有计算。
[解决办法]
受8楼的启发,找到了不用递归的方法 TotalSalaryWithoutRecursion():
C# code
using System.Collections.Generic;class Employee{  // 该员工本人的薪金  public decimal salary;    // 该员工的直接下属的集合  public List<Employee> EmployeeCollection;    // 该员工及其下属(直接和间接)的总薪金,递归的方法  public decimal TotalSalary()  {    decimal s = salary;    if (EmployeeCollection != null)    {      foreach (Employee x in EmployeeCollection)      {        s += x.TotalSalary();      }    }    return s;  }    // 该员工及其下属(直接和间接)的总薪金,不用递归的方法  public decimal TotalSalaryWithoutRecursion()  {    decimal s = salary;    for (List<Employee> ec = EmployeeCollection; ec != null && ec.Count > 0; ec = SubCollection(ec))    {      foreach (Employee e in ec)      {        s += e.salary;      }    }    return s;  }    // 返回员工集合 ec 中每个员工的直接下属组成的集合  private List<Employee> SubCollection(List<Employee> ec)  {    List<Employee> list = new List<Employee>();    foreach (Employee e in ec)    {      if (e.EmployeeCollection != null) list.AddRange(e.EmployeeCollection);    }    return list;  }}
[解决办法]
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
[解决办法]
..
[解决办法]
lg
[解决办法]
学习了,很不错
[解决办法]
好东东,谢谢楼主
[解决办法]
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
[解决办法]
学习了
[解决办法]
写一种 队列的方法
大概考这个呗
using System;
using System.Collections.Generic;
Queue<string> employeers = new Queue<string>();

public decimal totalSalary(employee person)
{
decimal totalSalary=0;
employeers.enqueue(person);
while(employeers.count>0)
{
totalSalary+=employeers.peek().salary;
if(employeers.peek().EmployeeCollection!=null)
{
foreach(employee e in employeers.peek().EmployeeCollection)
{
employeers.enqueue(e);
}
}
employeers.dequeue(employeers.peek());


}
  
return totalSalary;


}
还有种递归上面写了
[解决办法]
估计就是堆栈之类的了
[解决办法]
jie fen
[解决办法]
迭代
[解决办法]
很好很强大

[解决办法]
学习哟

热点排行