騰訊模擬筆試歌單問題
阿新 • • 發佈:2019-01-25
騰訊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();
}
}
}