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

كود ايجاد كل الامكانيات من مجموع عدد

بدأه npare في 11 أبريل 2011 · 1 رد · 411 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي سؤال ارجو المساعدة

انا اريد كود يجد كل الامكانيات لتركيب سلسلة مكونه من 6 اعداد في المجال من 15 الى 55 بحيث تحقق الشرظ بان مجموع كل حدود السلسله يساوي عدد احدده انا ويعرض كل الامكانيات الممكنه .

انا كتبة الكود التالي :

            int i1, i2, i3, i4, i5, i6,c=0;
            for (i1 = 15; i1 < 55; i1++)
                for (i2 = i1; i2 < 55; i2++)
                    for (i3 = i2; i3 < 55; i3++)
                        for (i4 = i3; i3 < 55; i4++)
                            for (i5 = i4; i5 < 55; i5++)
                                for (i6 = i5; i6 < 55; i6++)
                                {
                                    if (i1 + i2 + i3 + i4 + i5 + i6 == 160)
                                        listBox1.Items.Add(i1 + " " + i2 + "" + i3 + " " + i4 + "  " + i5 + " " + i6);

                                    c++;
                                }

            listBox1.Items.Add(c);

اريد حل مشكلتين اولا هذا الكود يدخل الحاسوب في دوامه اريد ان يعطيني الحاسوب النتائج ولو ببطئ حتى ينتهي من كل الامكانيات عندي حاسوب قوي ومع ذلك يدخل في وضع لا يستجيب

المشكله الثانيه لا اريد تكرار نفس السلسله والترتيب لا يهم .

#2

السلام عليكم.

لديك خطأين صغيرين في الكود الذي كتبته:

1) في حلقة i4 استخدمت i3<55 في حين أنه يجب أن يكون كالتالي:

for (i4 = i3; i4 < 55; i4++)

2) أظن أنك استخدمت المتحول c من أجل معرفة عدد المرات التي تحقق فيها مجموع العدد المطلوب و بالتالي يجب وضع c++ في جسم تعليمة if كالتالي:

        	if (i1 + i2 + i3 + i4 + i5 + i6 == 160)
        	{
            	listBox1.Items.Add(i1 + " " + i2 + "" + i3 + " " + i4 + "  " + i5 + " " + i6);

            	c++;
        	}

على كل أن كتبت الكود التالي الذي يستخدم ال Thread من أجل جعل الفورم يستجيب للمستخدم أثناء إجراء العملية الطويلة:

using System;
using System.Threading;
using System.Windows.Forms;
using System.Collections;

namespace Test2
{
	public partial class Form1 : Form
	{
    	public Thread _thread;
    	public delegate void ShowValueCallback(String str);

    	public Form1()
    	{
        	InitializeComponent();
    	}

    	private void btnStart_Click(object sender, EventArgs e)
    	{
        	if (_thread != null)
            	return;

        	listBox1.Items.Clear();

        	_thread = new Thread(CalculateSum);
        	_thread.Start();

    	}

    	private void ShowValueValue(string str)
    	{
        	listBox1.Items.Add(str);
    	}

    	private void CalculateSum()
    	{
        	int i1, i2, i3, i4, i5, i6, c = 0;
        	DateTime startTime = DateTime.Now;

        	for (i1 = 15; i1 < 55; i1++)
            	for (i2 = 15; i2 < 55; i2++)
                	for (i3 = 15; i3 < 55; i3++)
                    	for (i4 = 15; i4 < 55; i4++)
                        	for (i5 = 15; i5 < 55; i5++)
                            	for (i6 = 15; i6 < 55; i6++)
                            	{
                                	if (i1 + i2 + i3 + i4 + i5 + i6 == 160)
                                	{
                                    	ArrayList numList = new ArrayList();
                                    	numList.Add(i1);
                                    	numList.Add(i2);
                                    	numList.Add(i3);
                                    	numList.Add(i4);
                                    	numList.Add(i5);
                                    	numList.Add(i6);
                                    	numList.Sort();

                                    	String str = String.Format("{0} {1} {2} {3} {4} {5}", numList[0], numList[1], numList[2], numList[3], numList[4], numList[5]);

                                    	if (!listBox1.Items.Contains(str))
                                    	{
                                        	c++;

                                        	listBox1.Invoke(new ShowValueCallback(ShowValueValue), new object[] { String.Format("{0:0000000}) {1}", c, str) });
                                    	}
                                	}
                            	}

        	listBox1.Invoke(new ShowValueCallback(ShowValueValue), new object[] { String.Format("Total Count: {0}", c) });

        	TimeSpan ts = DateTime.Now - startTime;
        	listBox1.Invoke(new ShowValueCallback(ShowValueValue), new object[] { String.Format("Total Time: {0} Seconds", ts.TotalSeconds) });

        	MessageBox.Show("Done");

        	_thread = null;
    	}

    	private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    	{
        	if (_thread != null)
            	_thread.Abort();
    	}
	}
}

Test2.zip

تم تعديل هذه المشاركة بواسطة Adel Khayata في 14 أبريل 2011 في 21:27

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