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

كود بحث في السي بلس بلس

بدأه Ms-soso في 29 يناير 2009 · 10 رد · 1,510 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

:blush: أخواني ابغى مساعدتكم واتمنى انكم ماتخيبوني

ابغى بس احد يعطيني كود سي بلس بلس يبحث عن عددين في مصفوفة يكون حاصل جمعهم العدد اللي يدخلة المستخدم مثلا كانت المصفوفة 1 4 2 6

ودخل المستخدم عشرة يكون الناتج 6 و4

ابغى الكود يكون في اوردر ان لاني عرفت اسوية في اوردر ان تربيع بس المطلوب اوردر ان

اتمى انكم تساعدوني ولكم جزيل الشكر

#2

ضع محاولتك اولا.

tvquran_6.gif

#3

السلام عليكم ,,

اقتباس
ابغى الكود يكون في اوردر ان لاني عرفت اسوية في اوردر ان تربيع بس المطلوب اوردر ان

أتمنى أن يفيدنا أحد الأخوة الخبراء في الموضوع, حسب ما أتصوره فإن الـ worst case لابد أن تكون ...

O(n^2)
#4
void Search (vector<int>&a ,int K)
{int c;
 for (int i=0;i<a.size();i++)
 {  c=K-a;
  for (int j=0;j<a.size();j++)

  if (a[j]==c)
   cout <<"answer="<<a<<"+"<<a[j]<<endl;}
}

هاذي المحاولة الاولى طبعا اتوقع في اوردر ان تربيع

تم تعديل هذه المشاركة بواسطة Ms-soso في 30 يناير 2009 في 15:25

#5

سوف يكون الكود اسرع لو كانت المصفوفة مرتبه ثم اللوب يكون للصف من صفر الى الخلية التي تحوي K

وللاعمدة من من بداية الصف الي الى الخلية التي تحوي K

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 30 يناير 2009 في 17:14

tvquran_6.gif

#6

أخ فهد كلامك مزبوط في السؤال في ملاحظة تقول رتب المصفوفة وبعدين سوي linear search

بس انا مافهمت ايش تقصد بعدين يعني اسوي مصفوفة ثنائية

انا ماني عارفة كيف اسوي بحث لعددين بلوب وحدة

#7

السلام عليكم ,,

هل جربتي التفكير مثلاً في استخدام البحث الثنائي binary search مع المصفوفة المرتبة ؟

#8

اي جربت بس يطلع لي البرنامج في O(NlogN)

#9

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

تحتاج لترتيب المصفوفه بأي طريقه ،، لكن طرق الترتيب العاديه في العاده تأخذ O(n log n) وأنت تريد o(n) ، كلام عجيب :S ، على العموم هناك طريقه تسمى FlashSort قد قرأت عنها ولم أجربها يقال أنها تعمل في o(n) ، ربما يفضل ان تلقى نظره عليها ..

بعد ترتيب مصفوفتك ، قم بوضع مؤشر index في البدايه وأخر في النهايه ، ثم اجمع هذه القيم وقارن هل تساوي الرقم المطلوب ، فاذا كانت كذلك فانتهي الحل ، واذا كانت أكبر من الرقم فقم بتحريك المؤشر الأخير خطوه للوراء ، واذا كانت أصغر قم بتحريك المؤشر في البدايه خطوه للأمام ، وهكذا سوف تستمر الى أن يتقابل المؤشرين مع بعض . بالطبع يشترط ترتيب المصفوفه أولا .. وزمن البحث هنا o(n) .

أنظر هنا ، لكن المصفوفه مرتبه جاهزه ، استخدم أي طريقه للترتيب :

#include <iostream>
using namespace std;

int main (int argc , char* argv[]) {
	int array[4] = {1,2,4,6};

	int start = 0;
	int end   = 3;

	bool found = false; 
	int number = 10;

	while ( start != end ) {
		if ( (array[start]+array[end]) == number ) {
			cout << number << " = " << array[start] << " + " << array[end] << endl;
			cout << "found in index : " << start << " and " << end << endl;
			found = true;
			break;
		}
		else if ( (array[start]+array[end]) > number ) // move end backward
			end--;
		else // move start forward
			start++;
	}

	if ( ! found )
		cout << "no elements in array thier sum equal to " << number << endl;

	return (0);
}

بالمناسبه سبق أن رأيت السؤال (البحث فقط ) في أحد مواقع الألغاز ، فلا تكون هذه مسابقه والا حتقسم الجائزه 50/50 :P :P

بالتوفيق .

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#10

السلام عليكم ,,

و الله شكراً أخ وجدي على حل السؤال و على رابط خوارزمية البحث :)

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 31 يناير 2009 في 15:48

#11

شكرا على ردودكم السريعة وجزاكم الله خير

بصراحة احنا استاذتنا في الجامعة اعطتنا اسم المنتدى وفعلا كانت صادقة قمة في الروعة والتعاون

أخ وجدي انا سويت ترتيب بان لوق ان زي ماقلت بس كنت ابغى كود البحث نفسو في اوردر ان بس كنت ابغى كود البحث :happy:

ولا والله مو لغز ولا شي هذا جزء من مشروع كان مطلوب مني بالجامعة اذا تبغى نتقاسم الدرجة :P

ومرة ثانية مشكورين

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