Професионална програма
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
KaloyanStoyanovvv avatar KaloyanStoyanovvv 66 Точки

Здравей, така като гледам може би този ред не е верен:

else if (index >= 'a' && index <= 'z' || index >= 'A' && index <= 'Z')          

sumCons += ((int)index / sequenceOfStrings[i].Length);

}

 

пробвай да го замениш само с else проверка:

else        

sumCons += ((int)index / sequenceOfStrings[i].Length);

}

0
05/06/2019 04:25:59
Vladimir_Dodnikov avatar Vladimir_Dodnikov 3 Точки

Ей благодаря ти, стана 100/100.

Според теб какво е обяснението?

0
RadostinStoychev avatar RadostinStoychev 128 Точки

Защото в първата if проверка проверяваш дали някоя от буквите съвпада, а във втората, както KaloyanStoyanovvv е обяснил, трябва да хванеш всички останали случаи. Тоест всички други букви, които не съвпадат. А този код:

else if (index >= 'a' && index <= 'z' || index >= 'A' && index <= 'Z')

хваща интервала от [a - z] или [A - Z], което си противоречи с предишната проверка и е ненужно. Тоест първо му казваш да ти намери съгласните (1вата if проверка), а след това му казваш да ти намери всички букви, които отново включват съгласните (else-if). Просто е ненужно.

0
05/06/2019 08:48:55
plambet0 avatar plambet0 4 Точки

А някой може ли да ми каже защо моето решение дава верни отговори но в Judge дава 0 от 100 ???

 

https://pastebin.com/Hjh2S1pA

0
nickwork avatar nickwork 655 Точки

Не покриваш всички варианти, малки букви / главни букви...променил съм едно две неща

 

using System;
using System.Linq;

namespace Arrays_Praktice_2
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int sumVowels = 0;
            int sumConsonant = 0;
            int sum = 0;
            string vowels = "EeUuIiOoAa"; // добавено

            int[] arrayOfSums = new int[n];

            for (int i = 0; i < n; i++)
            {
                string name = Console.ReadLine();
                for (int j = 0; j < name.Length; j++)
                {
                    char currentLetter = name[j]; // това трябва да е чар

                    if (vowels.Contains(currentLetter)) // променено
                    {
                        sumVowels += currentLetter * name.Length;
                    }
                    else
                    {
                        sumConsonant += currentLetter / name.Length;
                    }
                }
                sum = sumVowels + sumConsonant;
                arrayOfSums[i] = sum;

                sumVowels = 0;
                sumConsonant = 0;
                sum = 0;

            }

            Array.Sort(arrayOfSums);
            for (int i = 0; i < arrayOfSums.Length; i++)
            {
                Console.WriteLine(arrayOfSums[i]);
            }


        }
    }
}

1
plambet0 avatar plambet0 4 Точки

Благодаря, въобще изтървах проверката за големите гласни, след като ги добавих и тях ми даде 100/100. 

 

Ето го преработено.

https://pastebin.com/KGNhc6Z3

 

Относно вашето решение, много е хитро това с "string vowels = "EeUuIiOoAa"; и после проверката 

char currentLetter = name[j]; 

                    if (vowels.Contains(currentLetter))

Само че не разбрах защо трябва да е char, при мен и с int стана. То реално не парсва ли буквата като и дава стойността на чара от Asci?

0
plambet0 avatar plambet0 4 Точки

А сега разбрах защо е char, защото вие проверявате за буква, а аз за число. Ясно. Благодаря !

0
Elena123456 avatar Elena123456 97 Точки

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

@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 97 Точки

Здравейте   @ 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