[03. Operators and Expressions] Моите решения


1

Здравейте ,

Това са моите лични решения на задачите от третата домашна https://github.com/encho253/CSharp-I/tree/master/03.Operators-%D0%90nd-Expressions

Не са нито най-кратките нито най-оптималните ,но изкарват 100/100 в БГКодер.

Споделям и решението на последнатга 15.Bit-Swap задача , която е подобна и на 14-та:

using System; /// <summary> /// Write a program first reads 4 numbers n, p, q and k and than swaps bits /// {p, p+1, …, p+k-1} with bits {q, q+1, …, q+k-1} of n. Print the resulting integer on the console. /// </summary> class BitSwap { /// <summary> /// Defines the entry point of the application. /// </summary> static void Main() { int number = int.Parse(Console.ReadLine()); int position = int.Parse(Console.ReadLine()); int qPosition = int.Parse(Console.ReadLine()); int k = int.Parse(Console.ReadLine()); for (int i = position; i < position + k; i++) { int mask1 = 1 << i; int mask2 = mask1 & number; int bit = mask2 >> i; int mask3 = 1 << qPosition; int mask4 = mask3 & number; int bit1 = mask4 >> qPosition; if (bit == 0) { int mask5 = ~(1 << qPosition); number = mask5 & number; if (bit != bit1) { int mask6 = 1 << i; number = mask6 | number; } } else if (bit == 1) { int mask7 = 1 << qPosition; number = mask7 | number; if (bit != bit1) { int mask8 = ~(1 << i); number = mask8 & number; } } qPosition++; } Console.WriteLine(number); } }

Дано да съм помогнал на някой :)

Очаквам Вашите въпроси , критики и коментари. На разположение съм !




Отговори



0

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

using System; class BitSwap { static void Main() { //Write a program first reads 4 numbers n, p, q and k and than swaps bits {p, p+1, …, p+k-1} //with bits {q, q+1, …, q+k-1} of n. Print the resulting integer on the console uint n = uint.Parse(Console.ReadLine()); uint p = uint.Parse(Console.ReadLine()); uint q = uint.Parse(Console.ReadLine()); uint k = uint.Parse(Console.ReadLine()); for (int i = (int)q; i <= q + k - 1; i++) { uint checkP = (n >> (int)p) & 1; uint checkQ = (n >> i) & 1; if (checkP != checkQ) { n = n ^ ((uint)1 << (int)p); n = n ^ ((uint)1 << i); } p++; } Console.WriteLine(n); } }


от grozdanovgg (55 точки)


1
Ееее супер оптимизирал си го :) Аз ако си поиграя още ще го съкратя и моето.Добро решение иначе.Браво!

от encho.enevski (316 точки)