私は入力 "N"を与えられました。追加される次の数が追加された最大数より1つ多くなるように、長さNのリストの番号を1から始める必要があります今まで。 (111,112,121,122,123)、[113]、または[131]は、リストに '3'を追加しているときには不可能であり、リスト内の最大数リストは '1'になるので、1または2だけ追加できます]。最適なアルゴリズム
N = 4の場合、リスト1213は3を加算しながら可能であり、リストの最大数は '2'であり、したがって3を加算することができる。
問題は、特定の入力「N」に対して可能なリストの数を数えることです。
私のコードは次のとおりです。 - 強引な方法である
public static void Main(string[] args)
{
var noOfTestCases = Convert.ToInt32(Console.ReadLine());
var listOfOutput = new List<long>();
for (int i = 0; i < noOfTestCases; i++)
{
var requiredSize = Convert.ToInt64(Console.ReadLine());
long result;
const long listCount = 1;
const long listMaxTillNow = 1;
if (requiredSize < 3)
result = requiredSize;
else
{
SeqCount.Add(requiredSize, 0);
AddElementToList(requiredSize, listCount, listMaxTillNow);
result = SeqCount[requiredSize];
}
listOfOutput.Add(result);
}
foreach (var i in listOfOutput)
{
Console.WriteLine(i);
}
}
private static Dictionary<long, long> SeqCount = new Dictionary<long, long>();
private static void AddElementToList(long requiredSize, long listCount, long listMaxTillNow)
{
if (listCount == requiredSize)
{
SeqCount[requiredSize] = SeqCount[requiredSize] + 1;
return;
}
var listMaxTillNowNew = listMaxTillNow + 1;
for(var i = listMaxTillNowNew; i > 0; i--)
{
AddElementToList(requiredSize, listCount + 1,
i == listMaxTillNowNew ? listMaxTillNowNew : listMaxTillNow);
}
return;
}
。問題のための最良のアルゴリズムは何か知りたいですか? PS:私はそのようなリストの数を知りたいので、すべてのリストを作成する必要はないと確信しています。 (私がコードでやっているやり方) 私はアルゴリズムがよくありませんので、長い質問の言い訳をしてください。
これは宿題ですか?投稿したテキストは正確に質問ですか?私は質問を正しく理解していないので質問し、宿題の場合は正確な質問を投稿するかもしれません。 – gbulmer
いいえその宿題は、友人が私に尋ねたちょうどパズル、あなたは質問についていくつかの疑問がある場合は、私が明確にすることができるかもしれない質問してください。 – user1045047
Okay - 3つの値のリスト111ですか、それとも1つの数字ですか? – gbulmer