C#如何仅显示组合的第一,第二和第三个答案?

时间:2017-04-25 00:30:25

标签: c# sorting console-application

我有使用组合方法的编码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


class Program
{
static void Main(string[] args)
{

    string input;
    int NoDisplay;
    decimal goal;
    decimal element;

    do
    {
        Console.WriteLine("Please enter the target:");
        input = Console.ReadLine();
    }
    while (!decimal.TryParse(input, out goal));

    Console.WriteLine("Please enter the numbers (separated by spaces)");
    input = Console.ReadLine();
    string[] elementsText = input.Split(' ');
    List<decimal> elementsList = new List<decimal>();
    foreach (string elementText in elementsText)
    {
        if (decimal.TryParse(elementText, out element))
        {
            elementsList.Add(element);

        }

    }

    int i;
    int j;
    decimal tmp;
    int[] arr1 = new int[10];

    for (i = 0; i < elementsList.Count; i++)

    {
        for (j = i + 1; j < elementsList.Count; j++)
        {
            if (elementsList[i] < elementsList[j])
            {
                tmp = elementsList[i];
                elementsList[i] = elementsList[j];
                elementsList[j] = tmp;
            }
        }
    }


    Console.WriteLine("Please enter the maximum combination :");
    NoDisplay = Convert.ToInt32(Console.ReadLine());


    Solver solver = new Solver();
    List<List<decimal>> results = solver.Solve(goal, elementsList.ToArray());

    //results.Reverse();

    Boolean recordexist = false;
    foreach (List<decimal> result in results)
    {
        if (result.Count == NoDisplay)
        {
            recordexist = true;
            foreach (decimal value in result)
            {
                Console.Write("{0}\t", value);
            }
            if (recordexist == true)
            {

                Console.WriteLine();
            }

        }
    }


    if (recordexist == false)
    {
        Console.WriteLine("No record exist");
    }

    Console.ReadLine();
}
}

Here is the output

我的问题是如何才能显示第一,第二和第三个答案 Like this

抱歉我的英语不好,我希望有人能帮助我。我还是c#btw的新手。谢谢

2 个答案:

答案 0 :(得分:0)

  

我的问题是如何显示第一,第二和第三个答案   仅?

只需创建一个1变量,每次显示results列表的子列表时增加3,当它到达break时我们可以{ {1}}循环。

int counter = 0;

foreach (List<decimal> result in results)
{
       if(counter == 3) break;

       if (result.Count == NoDisplay)
       {
            recordexist = true;

            foreach (decimal value in result)
            {
                Console.Write("{0}\t", value);
            }

            if (recordexist == true)
            {
                Console.WriteLine();
            }
            counter++;
       }
}

答案 1 :(得分:0)

我想说最简单的选择是使用Linq方法Where(过滤结果)和Take(取前n个结果):

var filteredResults = results
    .Where(r => r.Count == NoDisplay)
    .Take(3);

foreach (var result in filteredResults)
{
    foreach (decimal value in result)
    {
        Console.Write("{0}\t", value);
    }
    Console.WriteLine();
}