簡體   English   中英

遞歸算法 C#

[英]Recursive Algorithm C#

我需要一些關於使用 C# 的算法的幫助。 我有一個對象列表,項目是 4 的倍數,我應該只返回兩個最好的項目。 每個項目都有一個值和一個描述。 我還必須對每兩個元素進行比較。 我想遞歸調用這個方法,直到我只有 2 個元素。

例子:

CardList.Add(new Card("Name A", 150));
CardList.Add(new Card("Name B", 100));
CardList.Add(new Card("Name C", 50));
CardList.Add(new Card("Name D", 556));
CardList.Add(new Card("Name E", 170));
CardList.Add(new Card("Name F", 160));
CardList.Add(new Card("Name G", 30));
CardList.Add(new Card("Name H", 650));


public Lis<Card> BestCards(Lis<Card> list){
    List<Card> listResult = new List<Card>(); 
    for(int i=1; i<=list.lenght; i+2)
    {
        if(list[i].value> list[i+1].value)
            listResult.Add(list[i])
        else if (list[i].value< list[i+1].value)
            listResult.Add(list[i+1])
        else if (list[i].value==list[i+1].value)    
        {
            // first element according to alphabetical order of the description
            listResult.Add(???)
        }   
    return listResult;
}

有什么建議嗎?

使用您當前使用的方法,您可能會丟失數據,因為每次進行比較時您都會刪除一個項目,而沒有檢查它是否比整個列表更好。

我建議對列表進行排序,然后以這種方式取前兩個項目,或者您可以將一個項目與其他每個項目進行比較,然后找到最好的兩個。

此解決方案應滿足您的要求。

第一種方法在剩余兩張以上卡片時進行迭代,第二種方法比較卡片並返回結果列表:

public List<Card> BestCards(List<Card> list){
    List<Card> listResult = list; 

    while (listResult.Count > 2)
        listResult = ReduceList(listResult);

    return listResult;
}


public List<Card> ReduceList(List<Card> list)
{
    var listResult = new List<Card>(); 

    for(int i = 0; i <= list.Count - 1; i+=2)
    {
        if(list[i].value > list[i+1].value)
            listResult.Add(list[i]);
        else if (list[i].value< list[i+1].value)
            listResult.Add(list[i+1]);
        else if (list[i].value==list[i+1].value)
            listResult.Add(list[i].name.CompareTo(list[i+1].name) <= 0 ? list[i] : list[i+1]);
    }

    return listResult;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM