前言
题目:
某著名的在线通信软件公司出过这么一道面试题,说“经理有3个女儿,她们的年龄和是13岁,年龄的乘积等于经理的年龄。有位员工知道经理年龄,但是不能确定他3个女儿都是多大,这时,经理跟他说,我只有一个女儿超过5岁,于是那位员工就知道了经理3个女儿的年龄,那么经理的3个女儿都分别是多大?”
使用C#推算经理3个女儿的年龄。
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目分析
已知国内的劳动法允许22岁到65岁的人工作,因此三个女儿的和不为13,且乘积不在此类范围的一律排除。又因为只有一个超过5岁的女儿,所以其他两个女儿的年龄最大不过5岁,最小不过1岁。同时,二女儿的年龄≥三女儿。根据上述条件,可以用循环语句求出准确结果。
又使用排除法,大女儿最大只有11岁,此时两个小女儿只能都为1岁,经理年龄为11岁,排除;10岁时,只有{10,1,2}一种可能(集合的无序性),年龄为20岁,排除;9岁时,有{9,1,4}符合条件,因此大女儿的年龄最大只能是9岁,最小为6岁。
二、题解
代码如下(示例):
using System;
namespace CalculateManagerAge
{
internal class Program
{
static void Main()
{
int DaughterA, DaughterB, DaughterC, Manager;
DaughterA = 6;
DaughterB = DaughterC = 1;
bool DaughterBRange = (1 <= DaughterB) && (DaughterB <=5);
int CalculateManager(int A, int B, int C)
{
return A*B*C;
}
while (DaughterA <= 9)
{
{
do
{
do
{
Manager = CalculateManager(DaughterA, DaughterB, DaughterC);
bool ManagerRange = (22 <= Manager) && (Manager <= 65);
if ((DaughterA + DaughterB + DaughterC == 13) && ManagerRange && DaughterB >= DaughterC)
{
Console.WriteLine("经理的年龄可能是:{0},大女儿的年龄是{1},二女儿的年龄是{2},三女儿的年龄是{3}。", Manager, DaughterA, DaughterB, DaughterC);
}
} while (DaughterC <= 5);
DaughterB++;DaughterC = 1
} while (DaughterB <= 5);
}
DaughterA++;DaughterB = DaughterC = 1;
}
}
}
}
计算结果
如图所示: