腾讯2018年8月31日模拟笔试的题目,这道题在网易还是贝壳的笔试上看到过,总的来说难度不大,下面是题目
一下是C#代码
using System;
using System.Collections.Generic;
namespace musicList
{
class Program
{
static void Main(string[] args)
{
//读取输入
int target = int.Parse(Console.ReadLine());
int[] detail = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
int Alen = detail[0], Anum = detail[1], Blen = detail[2], Bnum = detail[3];
List<List<int>> lstCls = new List<List<int>>();
// 寻找组合方式
for (int i = 0; i <= Anum; i++)
{
List<int> lstTmp = new List<int>();
for (int j = 0; j <= Bnum; j++)
{
if (i * Alen + j * Blen == target)
{
lstTmp.Add(i);
lstTmp.Add(j);
}
}
if (lstTmp.Count != 0)
{
lstCls.Add(lstTmp);
}
}
//解决一个两个排列问题,将每次的两个排列结果相乘,最后结果相加
int result = 0;
int SumA = 1, SumB = 1;
for (int i = 1; i <= Anum; i++)
{
SumA *= i;
}
for (int i = 1; i <= Bnum; i++)
{
SumB *= i;
}
for (int i = 0; i < lstCls.Count; i++)
{
int Sum1 = 1, Sum2 = 1;
for (int k = 1; k <= Anum-lstCls[i][0]; k++)
{
Sum1 *= k;
}
for (int k = 1; k <= Bnum- lstCls[i][1]; k++)
{
Sum2 *= k;
}
result += SumA / Sum1 * SumB / Sum2;
}
Console.WriteLine(result);
Console.ReadLine();
}
}
}