Operators and Expressions Homework 2015


17

Ето моя вариант на домашното.

С този материал вече се влиза малко по-надълбоко, затова ми е интересно как сте подходили към проблемите. :)




Отговори



0

Аааа. Вече ще се побъркам. 

Point inside a circle

...........................

 Така. (x - 1) + (y - 1) * (y - 1) <<< Това го бях преписал от едно решение. Не виждам логика да вадя 1 от х и y.

Друго - какво не ми харесва на границите на правоъгълника? Не ще и не ще.

.

.

.  Прости числа:

          

Prime numbers

Мисля, че логиката ми е правилна, но всички вдигат на квадрат, мистерия за мен. А един колега ме хвърли в тъч, като ми предлага да вкарвам ситото на Ератостен - най-добрият вариант. Нямам време да си блъскам главата с него сега.

П.С. Завърших 1-ви клас с 5. Математиката не ми беше любим предмет. Напоследък това взе да се променя, но пропуските са си налице.


от Bruno (921 точки)


1

Здрасти, 

>>Не виждам логика да вадя 1 от х и y.

Моята логика, е че по този начин местиш окръжността в центъра на координатната система, за които окръжности е вярно че всички точки за които х*х + у*у = r*r се намират по окръжността (нещо свързано с правоъгълния триъгълник). И съответно всички с х*х + у*у < r*r са вътре.

А за правоъгълника, ако си начертаеш условието ясно се вижда, че точките които са в кръга, но не са в правоъгълника са тези за които y > 1. Така че може според мен само това условие да добавиш


от Mirka (1454 точки)

0

Ех... близко съм бил наистина. Просто второто условие за правоъгълника го промених на y>1. И всичко тръгна. Сигурно час и нещо блях в чертежа...

А за движението на окръжността ми мина през ума, че може да е така, за да може центъра да е 0. Щото винаги е бил така. Сигурно може и без да се мести да се реши, но може би ще се усложнят нещата. А аз не искам да се затормозявам повече. Ясно. Задачата работи.

 А имаш ли идея за простите числа? Даже това условие (n % 1 == 0) може и да не го пиша. Щото всяко число се дели на 1. Очевидно е.

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


от Bruno (921 точки)



0

Според вас кода ми адекватен ли е за 6-та задача ?

 Console.Write("Enter a four-digit number: ");
        string number = Console.ReadLine();
        
        int a = (int)char.GetNumericValue(number[0]);
        int b = (int)char.GetNumericValue(number[1]);
        int c = (int)char.GetNumericValue(number[2]);
        int d = (int)char.GetNumericValue(number[3]);
        
        int sumOfDigits = a + b + c + d;
        Console.WriteLine("Sum of digits: {0}", sumOfDigits);
       
        Console.WriteLine("Reversed: {0}{1}{2}{3}",d,c,b,a);
        Console.WriteLine("Last digit in front: {0}{1}{2}{3}",d,a,b,c );
        Console.WriteLine("Second and third digits exchanged: {0}{1}{2}{3}",a,c,b,d);




2
Да, съвсем прилично решение е :)

от dentia (12519 точки)

1
Добре си е кода. Според мен е напълно адекватен

от Mirka (1454 точки)



0

 private static bool IsPrime(int number)
{
    if (number < 2)

        return false;
    if (number == 2)

        return true;
    for (int i = 2; i <= (int)Math.Sqrt(number); i++)
    {
        if (number % i == 0)

            return false;

    }
    return true;

}

Здравей ще бъда много благодарен , ако ми обясниш точно какво се случва тук :) . 


от Synergy (33 точки)


0

И на мен ми е интересно да разбера. Знам само, че простите числа тръгват от 2 нагоре. 1 делено на което и да е число ще има някакъв остатък.


от Bruno (921 точки)

3

Това е метод, който приема като аргумент число и връща true/false в зависимост от това дали е просто или не.

Ако числото е по-малко от 2, автоматично връща false(числото не е просто).

Ако съвпада с 2 (първото, както и единствено четно, просто число), връща автоматично true(просто е).

Във всеки друг случай(числото е по-голямо от 2) се завърта цикъл от 2 до корен кв. от числото и се проверява дали се дели без остатък. В случай, че числото се дели с остатък на някоя итерация от цикъла, това значи, че има делител различен от себе си и 1, което пък значи, че числото не е просто. Ако до края на цикъла методът не върне false, то числото е просто, излизаме от цикъла и връщаме true. :)


от dentia (12519 точки)



0

С много главоблъсканици успях да се преборя и аз...

Ето и моите задачки и както винаги съм отворен за критики и предложения.

https://github.com/darkyto/Operators_Expressions_homework

Специално за задача номер 16

Problem 16.** Bit Exchange (Advanced)

Имам един въпрос ... побитовата ми проверка работи идеално и в предишната задача и в контролните случаи от самата 16-та задача НО не се справи с граничният вариант при който групите от 2ра и 22-ри бит местим с 10 позиции и стигаме 32-рият бит (той не е ли контролен за знак и по принцип може ли да го обработваме!?!?)... съответно вкарах една допълнителна проверка но ме съмнява дали това е идеята.... много много време си блъсках главата в стената и накрая не измислих нищо освен да хитрувам с допълнителен if-else..  Някой идеи как да реша проблема?


от divided.zero (692 точки)


0
Колега, в условието на задачата изрично е упоменато, че числото, което се въвежда е unsigned integer (uint). Това автоматично изключва последният 31-и бит като заделен за знака. Друго важно е, че битовете се броят от 0 до 31-и. Реално 32 номер бит е извън обхвата на integer-a. Поздрави!

от todorm85 (1347 точки)

0

С uint се скъсах да пробвам варианти ,но не ми тръгват побитовите операции в цикъла - чупят се поради невъзможност за имплицитна конверсия..  с експлицитната още по-голяма драма настъпва..  нещо фундаментално ли пропускам тук?

Същото счупване се случва и с ulong..  просто кода който работи извън цикъла в предната задача.. тук ми се чупи 

поради невъзможност за конверсия когато го сложа в цикъла... 


от divided.zero (692 точки)


0
Ето нещо и от мен :)



0

Въпрос към 5та задача = проверка дали 3тото число от дясно наляво е 7. 

Има просто математическо решение, но преди да го видя не се сетих нищо друго освен да прочета числото като стринг и после да видя третата позиция и да проверя дали е 7. Хубавото е че работи с много големи числа, лошото е че не знам как да го накарам да познава отрицателните? Това е кода:

using System;

    class FourthDigit
    {
        static void Main()

        {
            Console.WriteLine("Please enter a whole (positive) number");
            string someNumber =Console.ReadLine();

            int lenght = someNumber.Length;// Calculates the lenght of the number
            string lastThreeDigits = someNumber.Remove(0,(lenght-3));// Shows the last tree digits of the number
            
            string result = lastThreeDigits.Remove(1);//Returns the value of the digit we want t o compare to 7
            
            int finalResult = int.Parse(result);
            bool answer = finalResult == 7 ? true : false;// Checks if the digit is seven
            Console.WriteLine("The third digit is 7 -------> " + answer);
                        
        }
    }


от mlmirow (0 точки)


1

int n = int.Parse(Console.ReadLine());

int temp = 0;

for (int i = 0; i < 3; i++)

{

temp = n % 10;

n /= 10;

}

bool isThirdDigitSeven = temp == 7;

Това е може би най-интуитивното математическо решение. Просто запазваш последната цифра от числото във временна променлива temp, въртиш for-loop от 0 до 3 и гледаш каква е стойността на temp накрая.

Това дали числото е положително или отрицателно не те интересува в случая, понеже търсиш 3-та цифра от дясно на ляво.

Пък ако искаш наистина да работиш само с положителни числа, просто премахваш '-' в началото на стринга така:

someNumber = someNumber.Remove(0,1);


от lnikod4s (6538 точки)

0

Мисля, че може и без цикъл:

Console.WriteLine(n / 100 % 10 == 7 ? true : false);

Едит:

@linkod4s Да съгласен съм ,просто споделих още една идейка :)


от mitakis (218 точки)



0
Колеги, качвам и моето домашно ---> ЦЪК <--- Всяка критика е добре дошла!!!



0
Ето и моите решения на 16-те задачи.



0
Ето моето домашно, макар и вече да е късно.

от newmast (116 точки)


0
Ето го и моето домашно тук без последните 2 задачи

от Ivaylo94 (10 точки)