某公司定制培训班笔试最后一题解题思路和解题代码
题目描述:
有3种面额的硬币:1分,2分和5分的。现在有100枚这样的硬币,面额总和是2.47元,求共有多少种可能,且1分,2分和5分的硬币各有多少。
解题思路:
假设1分,2分和5分的硬币个数分别是x,y,z个。
则有:
x + y + z =100
x+2y+5z=247
可得:
X = 3z – 47
Y = 147-4z
又知道
x >= 0
y>=0
z>=0
5z<=247
可得:
16<=z<=36
问题得解。
问题的证明:
用c#代码实现,并输出每种解的值。
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int num = CaluSovNum();
}
private static int CaluSovNum()
{
int x, y, z;
int num = 0;
for (z = 16; z <= 36; z++)
{
x = 3 * z - 47;
y = 147 - 4 * z;
if (x <0 || y <0 || x + y + z != 100 || x + 2 * y + 5 * z != 247)
{
throw new Exception("Error");
}
num++;
Console.WriteLine("1分钱的硬币个数是{0}, 2分钱的硬币个数是{1}, 5分钱的硬币个数是{2}",
x, y, z);
}
return num;
}
}
}