مساهمة مني في اعادة الروح الى السلسلة هذا سؤال بسيط و حله في سطر واحد فقط
اذا كان عندك متغير X كيف تعرف أن X على الصورة 2 اس n يعني على الصورة 2 , 4 , 8 , 16 , 32 , .... الخ
الحل بسيط للغاية و في سطر واحد
if math.log(x,2) % 2 ==0 then yes else no
جواب على السريع!
لو كان صحيح، احذف هذه المشاركة حتى يتسنى للأعضاء المشاركة!
صفحاتي: صفحة حسام الملحم www.hussam.ws مدونة
آخر المشاريع: مشروع لغة برمجة عربية شيئية التوجه
ألعاب على الجوال : 1-(لعبة O X على الجوال ) 2-(لعبة الرقم السري على الجوال ) 3-(لعبة آخر حبة على الجوال )
ألعاب على الحاسب: لعبة الوزراء الثمان ، لعبة شطرنج ، لعبة التركيب Tetris
مواضيعي:
الفرق الجذري بين الجافا و C# شرح التعامل مع WTK لبرمجة الجوالات
مشاركاتي:
برنامج (كاتب) للكاتب فهد OMLX، برنامج (المحول) للكاتب فهد OMLX، برنامج (Unit Storm) للكاتب بشير C&Dell، أيهما أكبر الأعداد الصحيحة أم الطبيعية للكاتب Romanof، سؤال رياضي بحت للكاتب VB6-Rocket، التحدي الكبير للكاتب ANSI،
اذا كان فيه بت واحد فقط 1 و البقية 0 أصفار .. (بغض النظر عن تمثيل الاعداد السالبة .. )
لكن كيف تعرف ذلك بسطر واحد؟
ذا كان العـدد مثلاً يساوي 1000 فبالإمكان عكسـه إلى 0111 .. وبإهمال الصفر الأخير فبالإمكان عكسه مرة أخرى إلى 0000 .. وبالتالي أي عدد بعد هذه الخطوات يساوي الصفر فهـو المطلوب .... لم أفكر مطولاً فيه ..
for(int i=0; i <=x; i <<=1) result = (i==x) ? true:false;
معرفش الحل ده ينفع ولا لاء
اقتباسif math.log(x,2) % 2 ==0 then yes else no
أخي ابومازن log(x,2) المفروض انها ترجع n , ليس شرط أن تقبل n القسمة على 2 بينما يجب أن تكون عدد صحيح وليست كسر
يعني ممكن نكتبها بهذا الشكل
result = ( log(x,2) == static_cast<float>( static_cast<int>(log(x,2) ) ) ? true: false;
هممم لا أدري لكن هذا حل آخر مستنبط من حل سلطان:
if Integer.toBinaryString(i).indexOf("1", 1)==-1 then YES ELSE NOوحلي الأول لم يناقش بعد:
if (Log(x)/Log(2)%2==0) Then Yes Else No
صفحاتي: صفحة حسام الملحم www.hussam.ws مدونة
آخر المشاريع: مشروع لغة برمجة عربية شيئية التوجه
ألعاب على الجوال : 1-(لعبة O X على الجوال ) 2-(لعبة الرقم السري على الجوال ) 3-(لعبة آخر حبة على الجوال )
ألعاب على الحاسب: لعبة الوزراء الثمان ، لعبة شطرنج ، لعبة التركيب Tetris
مواضيعي:
الفرق الجذري بين الجافا و C# شرح التعامل مع WTK لبرمجة الجوالات
مشاركاتي:
برنامج (كاتب) للكاتب فهد OMLX، برنامج (المحول) للكاتب فهد OMLX، برنامج (Unit Storm) للكاتب بشير C&Dell، أيهما أكبر الأعداد الصحيحة أم الطبيعية للكاتب Romanof، سؤال رياضي بحت للكاتب VB6-Rocket، التحدي الكبير للكاتب ANSI،
على العموم الحل بسيط و يأتي من الحقيقة التي ذكرها سلطان و هي أن الأعداد التي تتبع القاعدة 2 أس n مثل 2, 4, 8, 16 ... تشترك في الخاصية التالية
من الأمثلة التالية سيتضح الموضوع
00000001 العدد 1 و هو 2 أس 0
00000010 العدد 2 و هو 2 أس 1
00000100 العدد 4 و هو 2 أس 2
00001000 العدد 8 و هو 2 أس 3
و هكذا نجد أنه دائماً يتحون من عدد أصفار على اليمين يساوي قيمة الأس متبوعاً بواحد ثم أصفار
و الفكرة هي عن طريق اكتشاف هذه الأصفار على يمين الرقم و لكن لاكتشافها سنحتاج لأرقام على هذا الشكل
00000000 و هو الرقم صفر
00000001 و هو الرقم 1
00000011 و هو الرقم 3
00000111 و هو الرقم 7
أي أنها الأرقام التي تسبق الرقم X بواحد دائماً أي أنها X-1
اذا الحل بسيط عن طريق عمل AND بين X و X-1 فإذا كان الناتج صفر اذن الرقم يتبع 2 اس n اما اذا كان الناتج 1 فانه غير ذلك
و هكذا يكون الحل
if ((x & (x-1)) ==0)
{
}
else
{
}Sr. Software Development Engineer
Hulu, LLC
My Blogs
حلوة قوي ,يا باشمهندس , نظرية برضووو :D
فعلا دي احسن طريقة لعمل الموضوع ده
أنا فاكر إني شفتها في كتاب من فترة بس مش فاكر إسمه
آه .. وأنا كنت أدور حول نفس هذه الفكرة .... وفي الأخير تطلع بكل هذه البساطـة ...
حل مبدع صراحـة
هذا الموضوع مغلق.