Preguntas de entrevistas...

Pues por azares del destino, estoy haciendo entrevistas, again.... es la 2da vez este año, eso de ser consultor no esta tan padre, antes pensaba que tenias la ventaja de que si te aburrias de un proyecto puedes cambiarte sin mucha bronca, pero la verdad es que extraño la estabilidad de ser FTE, bueno el punto aca es compartir un par de preguntas que me han hecho para un par de procesos de seleccion, la verdad es que cuando trabajaba en Mexico, en muy raras ocaciones me preguntaban este tipo de cosas, normalmente se iban directo al conocimiento teoricode .NET, javascript o resolver algun problema ya en codigo, aca en USA lo primero es algun problema de algoritmos o estructuras de datos (aca le dan bastante importancia a tus capacidades de problem solving), ya si pasas un screening de esos vienen los demas tipos de preguntas.

El primer problema es uno que  me enviaron ayer y justo ahorita revise y resolvi:



















Para resolver este problema, la idea es checar todos los elementos del arreglo, contro el restos de elementos, y al mismo tiempo ir acumulando la suma de los elementos que ya llevas recorridos contra los siguientes elementos del arreglo, para no hacerse la vida complicada, les comparto la solucion usando algo de recursion:

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
using System.Text;
using System.Threading.Tasks;

namespace prob
{
    class Program
    {
        static void Main(string[] args)
        {        
            List numbers = new List { 1,1,2,2,4};

            PrintSumCombinations(numbers, 4);
            Console.ReadLine();
        }

        public static void PrintSumCombinations(List numbers, int expectedSum)
        {
            int counter = 0;
            int sum = 0;           
            string path = string.Empty;

            foreach (var number in numbers)
            {
                sum = number;
                path = counter.ToString();

                if (sum == expectedSum)
                {                   
                    System.Console.WriteLine(path);
                }

                PrintSumCombinations( numbers, sum, path, counter + 1, expectedSum );
                counter++;
            }
        }

        private static void PrintSumCombinations(List numbers, int sum, string path,  int counter,int  expectedSum)
        {
            int tmpSum = 0;
            string tpmPath = string.Empty;

            for(int i = counter; i < numbers.Count; i++ )
            {
                tmpSum = sum + numbers[i];
                tpmPath = path + " " + i.ToString();

                if (tmpSum == expectedSum)
                {                    
                    System.Console.WriteLine(tpmPath);
                }

                PrintSumCombinations(numbers, tmpSum, tpmPath, i + 1, expectedSum);                                                   
            }
        }
    }
}




Comentarios

Entradas populares