Професионална програма
Loading...
Vladimir_Dodnikov avatar Vladimir_Dodnikov 3 Точки

01. Encrypt, Sort and Print Array C#-Fund

Здравейте колеги,

нещо забих с тази задача от Arrays - More Exercises.

В Judge ми дават 60/100. Проверих дадените примери от условието - излизат ...cool

Може ли някой да погледне кода и евентуално да каже къде бъркам? enlightened

ето линк за моето решение:  http://pastebin.com/wP5ZYkaz

Благодаря, предварително!

Условието:

Write a program that reads a sequence of strings from the console. Encrypt every string by summing:

  • The code of each vowel multiplied by the string length

 

 

Input

Output

Comments

4

Peter

Maria

Katya

Todor

1032

1071

1168

1532

Peter = 1071

Maria = 1532

Katya = 1032

Todor = 1168

3

Sofia

London

Washington

1396

1601

3202

Sofia = 1601

London = 1396

Washington = 3202

  • The code of each consonant divided by the string length

Sort the number sequence in ascending order and print it on the console.

On first line, you will always receive the number of strings you have to read.

Тагове:
1
Module: C# Advanced
Elena123456 avatar Elena123456 98 Точки

Може ли малко помощ и за тази задача, ще съм много благодарна. Може би вече малко прекалявам, защото усещам, че и на работа аз си мисля само и единствено за задачите и лесно се отегчавам от всичко друго. :)

@krum_43 ,

приблизително логиката, която първоначално ми хрумна е подобна на вашата, която я прочетох в друга тема( https://softuni.bg/forum/22676/encrypt-sort-and-print-array )- с лист. При тестване на MonoDevelop аутпутите са ми точно тези, които трябва да се получат. Judge само 1 и 2 нулев тест ми изписва, че са коректни, а за другите получавам RunTime Error.  Опитах да променя сумата от интове в дабъли, но отново RunTime Error. Махнах и всички нули от листа и отново същото положение.

Видях, че в някои решения колеги пишат, че е достатъчно да има само една if проверка и else съответно. Не мисля, че е достатъчна само else проверка, защото потребителя може да реши да си въведе каквото иска освен гласни или съгласни-интове наприме. А и отделно от това видях, че списъка не трябва да съдържа нула.

Найстина не мога да си обясня от къде идва  RunTime Error.

using System;
using System.Collections.Generic;
using System.Linq;

namespace ArrayMoreExe
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            List<char> vowels = new List<char>
            {
                'a','A',
                'e','E',
                'i','I',
                'o','O',
                'u','U'
            };

            List<char> consonants = new List<char>
            {
             'B','b','C','c','d','D','F','f','G','g','H','h','J','j','K','k','L','l','M','m','N','n','P','p',
             'Q','q','R','r','S','s','T','t','V','v','W','w','X','x','Y','y','z','Z'
            };

            int linesNumbers = int.Parse(Console.ReadLine());
            double[] sumOfAll = new double[4];
            for (int i = 0; i <linesNumbers; i++)
            {
                string word = Console.ReadLine();
                double sum = 0;

                for (int k = 0; k < word.Length; k++)
                {
                    if (vowels.Contains(word[k]))
                    {
                        sum = sum + ((double) word[k] * word.Length);

                    }
                    else if(consonants.Contains(word[k]))
                    {
                        sum=sum + (double)(word[k] / word.Length);
                    }
                  
                }
                sumOfAll[i] =sum;
            }


            var listOfSum = sumOfAll.ToList();
            var newListWithoutZero= listOfSum.Where(x => x != 0);
            var newOrderList = newListWithoutZero.OrderBy(x => x);
            foreach (var item in newOrderList)
            {
                Console.WriteLine(item);
            }
        }
    }
}
 

0
MarinaRadusheva avatar MarinaRadusheva 2 Точки

@Elena123456
Здравейте, Елена,

На пръв поглед,  заложена е дължина на масива 4, вместо linesNumber  double[] sumOfAll = new double[4];

След това наистина няма нужда от else if, нито от кастване към дабъл. Сложи си сумата да е инт. Мисля, че и аз бях тръгнала да се подсигурявам толкова много, но входните данни се оказват доста прости и с толкова проверки, накрая излиза грешно решение. Ето как ти коригирах кода:

 

using System;
using System.Collections.Generic;
using System.Linq;

namespace ForumProblemWithFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            List<char> vowels = new List<char>
            {
                'a','A',
                'e','E',
                'i','I',
                'o','O',
                'u','U'
            };

            List<char> consonants = new List<char>
            {
             'B','b','C','c','d','D','F','f','G','g','H','h','J','j','K','k','L','l','M','m','N','n','P','p',
             'Q','q','R','r','S','s','T','t','V','v','W','w','X','x','Y','y','z','Z'
            };

            int linesNumbers = int.Parse(Console.ReadLine());
            double[] sumOfAll = new double[linesNumbers];
            for (int i = 0; i < linesNumbers; i++)
            {
                string word = Console.ReadLine();
                int sum = 0;

                for (int k = 0; k < word.Length; k++)
                {
                    if (vowels.Contains(word[k]))
                    {
                        sum = sum + (word[k] * word.Length);

                    }
                    else 
                    {
                        sum = sum + (word[k] / word.Length);
                    }

                }
                sumOfAll[i] = sum;
            }


            var listOfSum = sumOfAll.ToList();
            var newListWithoutZero = listOfSum.Where(x => x != 0);
            var newOrderList = newListWithoutZero.OrderBy(x => x);
            foreach (var item in newOrderList)
            {
                Console.WriteLine(item);
            }
        }
    }
}

1
16/09/2020 16:20:55
Elena123456 avatar Elena123456 98 Точки

Здравейте   @ MarinaRadusheva    и благодаря много за отделеното време. :)

Не мога да си обясня как се появи масив с дължина 4 в кода ми. Още в началото исках да е с дължина, толкова колкото и инпути (стрингове) имаме. Но да, не е станало  така както съм си го мислили и отново благодаря за доглеждането Ви и желанието Ви да ми го съобщите. :)

А колкото до условието на задачата, може би по-коректно е да бъде така зададено: "ако стринга съдържа гласна буква, кода на всяка гласна умножете с дължината на самия стринг, но ако съдържа всичко останало друго съотвения код разделете на неговата дължина." Дефакто излиза, че изобщо няма нужда от масив/лист, в които да държим всички съгласни букви. Програмата изобщо не се интересува дали имаме съгласни, защото и ето това решение, без и да споменавам някъде за съгласни букви, е 100/100. Странно, но факт.

Поздрави и всичко най-добро!

 

using System;
using System.Collections.Generic;
using System.Linq;

namespace ArrayMoreExe
{
    class MainClass
    {
        public static void Main(string[] args)
        {

            List<char> vowels = new List<char>
            {
                'a','A',
                'e','E',
                'i','I',
                'o','O',
                'u','U'
            };


            int linesNumbers = int.Parse(Console.ReadLine());
            int[] sumOfAll = new int[linesNumbers];
            for (int i = 0; i <linesNumbers; i++)
            {
                string word = Console.ReadLine();
                int sum = 0;

                for (int k = 0; k < word.Length; k++)
                {
                    if (vowels.Contains(word[k]))
                    {
                        sum = sum + (int) word[k] * word.Length;

                    }
                    else
                    {
                        sum=sum + (int)(word[k] / word.Length);
                    }
                  
                }

                sumOfAll[i] =sum;
            }


            var listOfSum = sumOfAll.ToList();
            var newListWithoutZero= listOfSum.Where(x => x != 0);
            var newOrderList = newListWithoutZero.OrderBy(x => x);
            foreach (var item in newOrderList)
            {
                Console.WriteLine(item);
            }

        }
    }
}

 

0
16/09/2020 22:14:00