一道笔试题,要求两种解法
已知有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
[解决办法]
迭代
[解决办法]
很好很强大
[解决办法]
学习哟