Ich habe einen Eingang, "N", ich muss die Nummer der Liste der Länge N finden, die mit 1 beginnt, so dass die nächste Nummer höchstens 1 mehr als die maximale Anzahl hinzugefügt wird bis jetzt. Zum BeispielOptimal Algorithmus
N = 3, mögliche Listen => (111, 112, 121, 122, 123), [113, oder 131 ist nicht möglich, während beim Hinzufügen von "3" zur Liste die maximale Anzahl in die Liste wäre '1', also können wir nur 1 oder 2 hinzufügen].
N = 4, die Liste 1213 ist möglich, während beim Hinzufügen von 3 die maximale Anzahl in der Liste '2' ist, also können 3 hinzugefügt werden.
Problem ist, die Anzahl solcher Listen für einen gegebenen Eingang "N" zu zählen.
Mein Code ist: -
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;
}
Welches ist die Brute-Force-Methode. Ich möchte wissen, was der beste Algorithmus für das Problem sein könnte? PS: Ich möchte nur die Anzahl solcher Listen wissen, also bin ich sicher, dass die Erstellung der Liste nicht erforderlich ist. (Die Art, wie ich im Code tue) Ich bin überhaupt nicht gut in Algorithmen, also bitte Entschuldigung für die lange Frage.
Ist das eine Hausaufgabe? Ist der Text, den du gepostet hast, genau die Frage? Ich frage, weil ich die Frage nicht richtig verstehe, und wenn es Hausaufgaben sind, könnten Sie die genaue Frage stellen. – gbulmer
Nein, es ist keine Hausaufgabe, es ist nur ein Puzzle, fragte mich ein Freund, Wenn Sie Zweifel an der Frage haben, bitte fragen, vielleicht kann ich klären. – user1045047
Okay - ist 111 eine Liste von drei Werten, oder ist es nur eine Zahl? – gbulmer