Loading...
Stoyan.Stoyanov avatar Stoyan.Stoyanov 96 Точки

Ако някой може да даде идея къде бъркам с решението на задача 8 от Operators and expressions, ще съм много благодарен.

Ето варианта, който измислих: http://pastebin.com/Vh0XU1p1

Проблемът е, че не пресмята правилно - например 78 и 36 ги смята като прости.

0
XmUrF avatar XmUrF 363 Точки

Здравей. Така както си го направил кода, всяко число, което въведеш, се дели n-1 на брой пъти (n e самото число, което си въвел) като ако има остатък си сложил "prosto" да е равно на 0, което пък да е равно на Prime. Тоест като въведеш 78, последното число, на което го делиш е 77, при което има остатък, съответно "prosto" ти е равно на 0 и съответно ти го изписва като prime.

Защо вместо да го въртиш този цикъл, което е излишно, направо не сложиш деление на числата 2, 3, 5, и 7? Всякакво друго деление е излишно, защото ако едно число се дели на 12 примерно, то ще се дели и на 2. Ако се дели на 9, ще се дели и на 3... и така нататък. Тоест няма да е просто. Излишно е да го делиш на всички възможни числа. Плюс това цикъла ти трябва да спира в момента, в който успееш да го разделиш на едно от всичките числа, с които го делиш. Така направен той си го върти и всеки път сменя стойността на "prosto".

 

Ако едно число не се дели на 2, 3, 5 и 7, и ако самото число не е едно от тях, и ако е положително, то то е просто.

Не съм много сигурен дали го обясних както трябва. Ако имаш нужда от допълнителни обяснения, пиши.

1
Aluin avatar Aluin 76 Точки

Ето и един друг подход на задача 8 http://pastebin.com/YY2e7NeH Веднъж като се схване логиката с делителя и става лесно за разбиране, но мисля че може и да се опрости. 

0
a_tifonoff avatar a_tifonoff 26 Точки
Математически това не е вярно.
0
Mart1n_Vatev avatar Mart1n_Vatev 5 Точки

Ето и от мен максимално съкратени решения на  15* и 16* задача!

0
MarinPetrov avatar MarinPetrov 20 Точки

Здравейте някой може ли да ми каже защо , в 15 задача не ми дава да използвам uint . Става въпрос за позицията
int firstBitsGroupPosition = 3;//position 3,4,5
int secondBitsGroupPosition = 24;//position 24,25,26
Ето и кода на задачата http://pastebin.com/y98qbCuT тя си работи и дава верни отговори но просто се зачудих , ако някой има идея нека сподели !

0
quickben avatar quickben 966 Точки

The left-shift operator (<<) shifts its first operand left by the number of bits specified by its second operand. The type of the second operand must be an int or a type that has a predefined implicit numeric conversion to inthttp://msdn.microsoft.com/en-us/library/a1sway8w.aspx

Хора на 16-та задача последното условие ми е 33 333 333 333 което е над допустимото за uint32.Трябва да направя проверка или е сгрешена задачата(както задача  10)? Мерси предварително.

0
XmUrF avatar XmUrF 363 Точки

Да, последното число е над допустимото. И аз много мислех какво да го направя, като според мен out of range трябваше да връща за опита да се въведе bit -1, но в крайна сметка реших да направя проверка и за въведеното число и ако то също e извън допустимите граници също да връща out of range.

0
Yulia avatar Yulia 1346 Точки

Аз искам да предложа на вниманието ви моето решение на задача 6. Four-Digit Number.
Когато зачетох условието, и на мен ми мина мисълта да правя деление на 10, 100 и т.н, но когато видях, че пише "The number has always exactly 4 digits and cannot start with 0.", ми хрумна друго: щом е тъй, защо да се занимавам с деление, с разделяне на string-a и т.н когато имаме един страхотен метод Console.Read() който чете точно един символ? :) Така директно си запазвам още с четенето цифрите в отделни променливи. Е, и точно, защото е символ, се наложи да вадя 48... (защото на символа 0, отговаря числото 48, 1 = 49 и т.н та го вадя за да получа нужната цифра), но е много е семпло и работи. ^^  Работи дори и ако започва с 0, работи и с... букви :D Но както и да е - мисля, че няма смисъл от каквито и да ре проверки, ексепшъни и други неща, щом данните ще са винаги правилни.

 

Едит:

Всъщност, след днешната лекция, ми хрумна и един друг подобен начин за решението й. Не знам дали е решена по този начин от някой де, но може да приемем и като един string всичко, а после да принтираме стойностите като елемент от масив. Например, за разменени стойности да е нещо такова: Console.WriteLine("{0}{2}{1}{3}", inputNumber[0], inputNumber[1], inputNumber[2], inputNumber[3]). Честно, не съм го тествала де, ама нещо ми подсказва, че ще стане :D

3
pdechkova avatar pdechkova 95 Точки

Здравейте, някой може ли да ми каже къде греша в 11 задача. На последната проверка с 62241 ми дава отговор 1, а трябва да е 0. Ето това е кода: 

Console.Write("Enter your number: ");
int number= int.Parse(Console.ReadLine());

Console.WriteLine(Convert.ToString(number, 2).PadLeft(16, '0'));

int mask = number << 3;

Console.WriteLine(mask != 0 ? 1 : 0);

0
Adrian.Bozhankov avatar Adrian.Bozhankov 9 Точки

Здравей,
в този код, който си написала, винаги ще ти дава отговор 1, с изключение когато числото е 0, защото числото изместено с 3 бита на ляво винаги е различно от 0.
Пробвай да изместиш числото с 3 бита на дясно и след това маската да ти е измественото число И (&) 1 и след това проверката да е дали маската е равна на 1, ако е значи третият бит е 1, ако не е, значи е 0.
Надявам се да съм бил полезен.
Поздрави.

1
pdechkova avatar pdechkova 95 Точки

Благодаря, получи се, но все още не мога да си изясня напълно ролята на маскатаfrown

0
XmUrF avatar XmUrF 363 Точки

Ролята на маската е да вземе стойността на даден бит, да нулира даден бит или да даде стойност на даден бит.

3
Harizanov avatar Harizanov 0 Точки

Ето на 15 задача Bits Exchange малко по-различно решение. Включил съм методи, за да не преписвам кода 3 пъти. Сигурен съм, че има много по-добър начин на решение, надявам се коментарите ми в кода да са ясни и достатъчно.

https://github.com/Harizanov/CSharp/blob/master/BitsExchange.cs

0
tzetzi avatar tzetzi 5 Точки

Някой може ли да ми каже как трябва да се формулира кода за 1 и 2-ра задача ?

 

0
13/11/2014 21:22:10
SimeonStoykov avatar SimeonStoykov 114 Точки

В какъв смисъл как трябва да се формулира? Имаш нужда от кода или от разяснения по него? Ето го кода на  2-те задачи:

Първа задача

Втора задача

Ако имаш нужда от разяснения по кода (кое от кода какво точно прави) пиши и ще ти го разясня.

1
tzetzi avatar tzetzi 5 Точки

Значи какво трябва да разбирам под   n % 2 ! 

Също така     Double.Parse и Int.Parse ?

И мерси за кода :)

0
SimeonStoykov avatar SimeonStoykov 114 Точки

int.Parse и double.Parse парсват (преобразуват) текст в число. Когато четеш нещо от конзолата (чрез Console.ReadLine()) в C# то се възприема като текст и затова, за да го възприеме програмата като число е нужно да го парснем (преобразуваме) в число, а това става точно чрез int.Parse и double.Parse, като int.Parse преобразува текста в цяло число, а double.Parse преобразува текста в число с плаваща запетая (реално число). Тоест всичко което имаш пред Parse зависи от типа данни, в който искаш да преобразуваш (дали ще е целочислен тип или число с плаваща запетая или друг тип). n % 2 дава остатъка от целочисленото деление на числото n на 2. Тоест ако n е четно число - 12 например, то 12 : 2 = 6 и няма остатък, затова n % 2 = 0 за всички четни числа, а n % 2 != 0 за всички нечетни числа ( != означава различно, тоест не равно). Ако n например е 5 то n % 2 = 1 ( 5 : 2 = 2 целочислено и 1 остатък).

2
14/11/2014 21:29:58
FunnyBunny avatar FunnyBunny 38 Точки

Видях, че в някои решения на задача 15. Bits Exchange се използва long, int вместо uint32, както е в условието на задачата. Мъчих се да реша задачата само с цикъл, понеже още не разбирам масивите. Очаквам коментари относно Решението ми. smile

0
Kamigawa avatar Kamigawa 750 Точки

UInt32 може да го викнеш като uint :) абсолютно същото е. Обаче между long и uint има 32 бита разлика, а между int и uint е само един бит, така че ако ти трябват повече битове от 32 - uint няма да ти свърши работа. Също така освен ако не се изисква оптимизация може да си ползваш int вместо byte, няма нужда да си усложняваш живота излишно. Първия If може да го пропуснеш, понеже така или иначе няма какво да пропусне с това continue.

1
FunnyBunny avatar FunnyBunny 38 Точки

Благодаря! :) Първоначално в тази задача превърнах нулите в единици, а единиците в нули. Получи се каша и съвсем обърках условието на задачата, понеже гледах и 19. Bits inverter от предишното домашно, която не успях да реша... та я решавах за втори път. Явно пиша излишни неща, за да съм сигурна, че покривам всички case-ове и да се ориентирам по-добре. laughing

0
Kamigawa avatar Kamigawa 750 Точки

Ако искаш да се ориентирсш по-добре, не е грешно да си слагаш коментари с // или /* */.  Добра практика е да са на английски, така който и да гледа кода ще се ориентира пи-лесно също.

2
Lubomirrrr avatar Lubomirrrr 32 Точки

Искам да попитам нещо по задачата  - Volleyball

Направих я почти,но накрая ми изкарва грешни (близки )числа,ето кода:

using System;

class Volleyball
{
    static void Main()
    {
        string leap = Console.ReadLine();
        int numberOfHolidays = int.Parse(Console.ReadLine());
        int numberOfweekends = int.Parse(Console.ReadLine());
        double totalPlayes = 0;
        totalPlayes += numberOfweekends;
        totalPlayes += (48 - numberOfweekends) * 3 / 4;
        totalPlayes += numberOfHolidays * 5 * 2/3;

        if (leap == "normal")
        {
            totalPlayes += 5.97;
        }
        Console.WriteLine(totalPlayes);
    }
}
Имам числа с плаваща запетая,как да ги закръгля.Пробвах с Math.Round - не се получи или аз не съм го направил правилно.

 

0
09/02/2015 17:15:43
knoteva avatar knoteva 1081 Точки

Здравей, имаш няколко проблема.

totalPlayes += (48 - numberOfweekends) * 3 / 4 не смята правилно, тъй като 3 и 4 са от тип int и при деленето се връща число от тип int. Може да го напишеш double(3)/4. Аналогично и при 2/3.

totalPlayes += numberOfHolidays * 5 * 2/3; Не трябва да има *5(това са броя holidays от първия пример).

if (leap == "normal") трябва да проверяваш да ли е leap, а не normal. И формулата за leap е: totalPlayes *= 1.15;(или totalPlayes += totalPlayes * 15 / 100;). 

За принтирането може да напишеш Console.WriteLine((int)totalPlayes);

0
09/02/2015 17:48:31
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.