Максимальная сумма пути в треугольнике для не простых чисел - PullRequest
1 голос
/ 24 апреля 2019

каков окончательный результат, ребята !! мой 8219 и мне сказали, что это неправильно !!

Вы получите входной файл из ортогонального треугольника, и вам нужно найти максимальную сумму чисел согласно приведенным ниже правилам;

  1. Вы начнете сверху вниз и перейдете к соседнему числу, как показано ниже.
  2. Вам разрешено ходить только по диагонали.
  3. Вы можете проходить только через NIM PRIME NUMBERS.
  4. Вы должны достичь в конце пирамиды как можно больше.
  5. Вы должны рассматривать свои данные как пирамиду.

Согласно вышеприведенным правилам, максимальная сумма чисел сверху вниз в приведенном ниже примере равна 24.

   *1
  *8 4
 2 *6 9
8 5 *9 3

Как вы можете видеть, у этого есть несколько путей, которые соответствуют правилу НЕ ПЕРВИЧНЫЕ ЧИСЛА; 1> 8> 6> 9, 1> 4> 6> 9, 1> 4> 9> 9 1 + 8 + 6 + 9 = 24. Как вы видите, 1, 8, 6, 9 - НЕ ПЕРВИЧНЫЕ ЧИСЛА, и если вы пройдете через них, вы получите максимальную сумму. В соответствии с заданием в 3, которое вы реализовали, какова максимальная сумма входных данных ниже? Это означает, что, пожалуйста, возьмите этот ввод (как файл или константу непосредственно внутри кода) для своей реализации и решите, используя его.

                             215
                           193 124
                         117 237 442
                       218 935 347 235
                     320 804 522 417 345
                   229 601 723 835 133 124
                 248 202 277 433 207 263 257
               359 464 504 528 516 716 871 182
             461 441 426 656 863 560 380 171 923
           381 348 573 533 447 632 387 176 975 449
         223 711 445 645 245 543 931 532 937 541 444
       330 131 333 928 377 733 017 778 839 168 197 197
    131 171 522 137 217 224 291 413 528 520 227 229 928
  223 626 034 683 839 053 627 310 713 999 629 817 410 121
924 622 911 233 325 139 721 218 253 223 107 233 230 124 233
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace final_assignment
{
class Program
{


    static void Main(string[] args)
    {

        Console.WriteLine("the maxmium sum is : {0}", func(0, 0));
        Console.ReadLine();
    }

    //function to read the string that contain the numbers
    static public string read()
    {
        const string x = @"     215
                               193 124
                              117 237 442
                            218 935 347 235
                          320 804 522 417 345
                        229 601 723 835 133 124
                      248 202 277 433 207 263 257
                    359 464 504 528 516 716 871 182
                  461 441 426 656 863 560 380 171 923
                 381 348 573 533 447 632 387 176 975 449
               223 711 445 645 245 543 931 532 937 541 444
             330 131 333 928 377 733 017 778 839 168 197 197
            131 171 522 137 217 224 291 413 528 520 227 229 928
          223 626 034 683 839 053 627 310 713 999 629 817 410 121
        924 622 911 233 325 139 721 218 253 223 107 233 230 124 233";

        return x;
    }

    //function to convert the string text into list of list<int>
    static public List<List<int>> ConvertSArrngToListOfIntList(string str)
    {
        //calculate the number of rows inside the string
        int Rows = 1;
        foreach (var item in str)
        {
            if (item == '\n') Rows++;
        }
        //create an array by line characters
        string[] arr = str.Split('\n');
        List<List<int>> b = new List<List<int>>();
        for (int i = 0; i < Rows; i++)
        {

            MatchCollection mc = Regex.Matches(arr[i], @"\d{3}");
            List<int> aa = new List<int>();
            foreach (Match item in mc)
            {
                int y = int.Parse(item.Value);
                aa.Add(y);
            }

            b.Insert(i, aa);
        }
        //complete every row to 15 values by adding zero
        for (int i = 0; i < Rows; i++)
        {
            if (b[i].Count <= Rows)
            {
                for (int j = i + 1; j < Rows; j++)
                {
                    b[i].Add(0);
                }

            }

        }

        return b;
    }
    //function to check if the number is prime or not and return boolean value
    static public bool PrimeChecker(int num)
    {
        if (num == 0 || num == 1)
        {
            return false;
        }
        else
        {
            for (int a = 2; a <= (int)Math.Floor(Math.Sqrt(num)); a++)
            {
                if (num % a == 0)
                {

                    return false;
                }

            }
            return true;
        }
    }
    private static int func(int x, int y)
    {
        List<List<int>> arrlist = ConvertSArrngToListOfIntList(read());
        if (x >= arrlist.Count)
            return 0;
        int self = arrlist[x][y];
        if (PrimeChecker(self))
            return 0;
        else

            return self + Math.Max(func(x + 1, y), func(x + 1, y + 1));
    }



}
 }
...