الم يكن استمرارك في المحاولة افضل من الاستسلام؟ :)
بالتوفيق
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

الم يكن استمرارك في المحاولة افضل من الاستسلام؟ :)
بالتوفيق
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

شكراً لك!
هل من تحدي آخر قريباً؟ على ألا يكون له علاقة بحلقات التكرار أرجوووك... ![]()
الحمد لله اخيsite maker :)
المهم انك وجدت الحل ولم تتاخر كتيرا
في انتضار تحدي اخر
هذا هو الحل للبرنامج باستخدام لغة جافا
package diamondonefor;
import java.util.Scanner;
public class DiamondOneFor {
public static void main(String[] args) {
int size = 0, div = 1, blank = 0, blanks;
System.out.println("Enter the desired size");
Scanner input = new Scanner(System.in);
size = input.nextInt();
int increment = blanks = size / 2;
blank = 1;
for (int i = 1; i <= ((size / 2 + 1) * (size / 2 + 1)) + ((size / 2) * (size / 2)) + ((size / 2) * (size / 2 + 1)); i++) {
if (blank <= blanks) {
System.out.print(" ");
++blank;
} else if (i % (div + increment) == 0) {
System.out.println("*");
if (i < (((size / 2) * (size / 2 + 1)) / 2) + ((size / 2 + 1) * (size / 2 + 1))) {
--blanks;
} else {
++blanks;
}
div += (size - (2 * blanks));
increment += blanks;
blank = 1;
} else {
System.out.print("*");
}
}
}
}بالطبع انا استخدمت التحليل الرياضي الطويل
هذا هو الرابط ، يحتوي على تحليل رياضي للمسألة
لاحظوا عندما نستخدم طول حلقة التكرار n*n ، فعندما يكون الحجم مثلا 9 يكون طول حلقة التكرار 81
بينما بهذه الطريقة طول حلقة التكرار سوف يكون 61 اي 25% اقل تقريبا
طبعا الحلول المكتوبه بلغات scripting تكون اقصر بسبب طبيعة هذه اللغات
بالتوفيق
تم تعديل هذه المشاركة بواسطة mental-driller في 17 يونيو 2011 في 05:39
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

بصراحة موضوع يحرك الدماغ بالفعل :wacko:
وقد قمت بالأطلاع على جميل الردود و الحلول في هذا الموضوع وبصراحة لم أستطع أن أفهم منها الي التي كتبت بلغة ++C و C , ولكن لم ايأس بل زادت عندي العزيمة لتعلم المزيد من اللغات ...
أشكرك اخي مانتل و أشكركم جميعاُ أخوتي على جهودكم الطيبة
;)
def space(x):
if x==0:
return
print " ",
return space(x-1)
def star(x):
if x==0:
return
print "*",
return star(x-1)
def diamond(x):
X=x
i=0
while i !=X+1:
if x!=-1:
m=abs(x)
y=m/2
space(y)
star(X-(y*2))
space(y)
print "\n"
x=x-2
i+=1عاوزين اسئله صعبة :lol:
In [6]: diamond(9)
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
* * * * * * *
* * * * *
* * *
*تم تعديل هذه المشاركة بواسطة -Ahmed Hassan في 7 يوليو 2011 في 15:24
وَمَا أُوتِيتُمْ مِنْ الْعِلْمِ إِلاَّ قَلِيلاً
-Ahmed Hassan كتب:;)
def space(x): if x==0: return print " ", return space(x-1) def star(x): if x==0: return print "*", return star(x-1) def diamond(x): X=x i=0 while i !=X+1: if x!=-1: m=abs(x) y=m/2 space(y) star(X-(y*2)) space(y) print "\n" x=x-2 i+=1عاوزين اسئله صعبة :lol:
In [6]: diamond(9) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
خلينا في السهل :) الحاجات الصعبه في project Euler
@Super Nova مشكور على المرور
No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!

اولا شكرا على الموضوع
ثانيا: الفكرة اللى اتحلت بيها المشكله بتستخدم لوب طويلة ومتنفعش الا على Console.Write() ف ال .NET او System.Out.print فى الجافا ومش بتطبع الجملة مرة واحده بل بالعكس بطبع كل حرف سواء space ,*
والفكرة طويله من حيث المبدأ لان احنا عندنا مثلثين متكررين بالشقلوب وسطر طويل وهو WIDTH
ممكن استخدام Stack لدفع القيم الاولى ثم سحب القيم بالعكس لعدم التكرار او لتفادى الطول اذا كان سيتم الطباعة مرة واحده!!!
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…