الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحدّي الحرف الواحد !

مغلق
بدأه مصطفى 36a2 في 6 أكتوبر 2013 · 9 رد · 1,163 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ...

التحدي بسيط جداً في قواعده ... يحتاج إلى التفكير بشدّة ...
الكود أسهل مما تتوقع :)
الكود بلغة C و باستخدام المصرّف gcc ( ما يهم ... المهم انه يعمل بشكل طبيعي )

int i, n=42;
main() {
  for(i=0; i<n; i--) {
    printf("*");
  }
}

المطلوب :
أن يطبع الكود 42 نجمة بالضبط .... لا أكثر ولا أقل ... ولا أي شيء آخر ... فقط 42 نجمة ... فقط فقط فقط ... وبالضبط :)
الأدوات :
يمكنك فقط ...
1- حذف محرف واحد فقط لا غير ... (المحرف هو أي حرف أو رقم أو فراغ موجود في الكود )
(أو )

2- زيادة محرف واحد فقط لا غير ...
(أو )
3-استبدال محرف واحد فقط بمحرف آخر ..

بصيغة أخرى : عندما تضع الحل .. يجب أن يكون هناك محرف واحد فقط متغيّر إما زائد أو ناقص أو مستبدل ...
هذه هي المسألة ... والسؤال مفتوح حتى يوم الجمعة القادم :)
بالتوفيق

2
#2

السلام عليكم

 

كيف الحال مصطفى

 

- عداد الحلقة ينقص بمقدار 1 إذاً سيتم وضع إشارة سالب للعدد 42 .

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#3

أهلا أخي الحبيب :)
لو وضعنا اشارة سالب للعدد 42 فلن ندخل الحلقة :)

#4

int i, n=42;

main() {

for(i=0; -i<n; i--) {

printf("*");

}

}

تم تعديل هذه المشاركة بواسطة fouad2008 في 6 أكتوبر 2013 في 22:29

2
#5

ممكن أيضاً تبديل < بـ+:

int i, n=42;
main() {
  for(i=0; i+n; i--) {
    printf("*");
  }
}

إذا صارت قيمة i = -42 سيصبح جمعها مع n صفر وستتوقف.

2
#6

ما شاء الله ... أحسنتما .. أخي فؤاد والأخ Mr.B ...
لا يزال هناك حل ثالث وسيعجبكما :)
بالتوفيق :)

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 6 أكتوبر 2013 في 23:41

#7
اقتباس
لو وضعنا اشارة سالب للعدد 42 فلن ندخل الحلقة :)

- :wacko: لهذه الدرجة فقدنا التركيز .

 

الحل الثالث تبديل عداد الحلقة i-- إلى n-- وبالتالي عند وصول المتغير n للصفر يكون الشرط i<n هو 0<0 غير محقق فيتم الخروج من الحلقة .

تم تعديل هذه المشاركة بواسطة ahmedsaoud31 في 7 أكتوبر 2013 في 01:29

1

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#8
int i, n=42;
main() {
  for(i=0; i<n; i++) {
    printf("*");
  }
}

هل تعتبر ++ او -- محرف واحد؟

1

Samir Ibrahim

VFP Blog

VB.NET Blog

#9

استبدل i ب n فى الشرط

#include <cstdio>

int i, n=42;

int main()
{
    for(i=0; i<n; n--)
    {
        printf("*");
    }
}
1


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#10

ما شاء الله :)
أخي أحمد سعود والأخ الأكبر محمد فتحي :) الحل صحيح تماماً ممتاز :)
استاذ سامر .. لا يمكنك استبدال محرفين معاً ... ولكن محاولة جيدة :)
 

انتهت الحلول لهذه المسألة .. خصوصاً ان حلاً يعتمد الحذف غير موجود ( على حد علمي على الأقل) ولكن هذه هي القواعد على أي حال ...

 

شكراً لجميع المشاركين :)

 

بارك الله فيكم جميعاً

والسلام عليكم ورحمة الله وبركاته

هذا الموضوع مغلق.

مواضيع مشابهة