اذهب إلى المحتوى

يونس ويس محمد C

الأعضاء
  • المساهمات

    7
  • تاريخ الانضمام

  • تاريخ آخر زيارة

أجوبة بواسطة يونس ويس محمد C

  1. بتاريخ 8 ساعات قال ماجد قطوسة:

    أهلاً بك 

    هذا برنامج يطبع لك الأعداد المتتابعة في مصفوفة معينة ، مشروح فيه كل خطوة بخطوتها باللغة الإنجليزية ،  يمكنك الإستفادة منه لحل المشكلة الخاصة بك فهي شبيهة الى حد كبير من هذا البرنامج ،  فقط قم باستبدال الارقام  من 0-9 الى الارقام 0 1 ،  و قم بفحص اذا كان العدد الحالي يسواي 1 أو لا ، و اذا كان بالفعل يساوي  1 تقم بإضافته الىت المصفوفة الجديدة ، و هكذا حتى تنتهي من جميع الأرقام المدخلة في البرنامج . 

    
    // برنامج لطباعة أطول مصفوفة متتالية من الأرقام 
    
    #include <bits/stdc++.h> 
    using namespace std; 
      
    // function that returns the length of the 
    // longest increasing subsequence 
    // whose adjacent element differ by 1 
    void longestSubsequence(int a[], int n) 
    { 
        // stores the index of elements 
        unordered_map<int, int> mp; 
      
        // stores the length of the longest 
        // subsequence that ends with a[i] 
        int dp[n]; 
        memset(dp, 0, sizeof(dp)); 
      
        int maximum = INT_MIN; 
      
        // iterate for all element 
        int index = -1; 
        for (int i = 0; i < n; i++) { 
      
            // if a[i]-1 is present before i-th index 
            if (mp.find(a[i] - 1) != mp.end()) { 
      
                // last index of a[i]-1 
                int lastIndex = mp[a[i] - 1] - 1; 
      
                // relation 
                dp[i] = 1 + dp[lastIndex]; 
            } 
            else
                dp[i] = 1; 
      
            // stores the index as 1-index as we need to 
            // check for occurrence, hence 0-th index 
            // will not be possible to check 
            mp[a[i]] = i + 1; 
      
            // stores the longest length 
            if (maximum < dp[i]) { 
                maximum = dp[i]; 
                index = i; 
            } 
        } 
      
        // We know last element of sequence is 
        // a[index]. We also know that length 
        // of subsequence is "maximum". So We 
        // print these many consecutive elements 
        // starting from "a[index] - maximum + 1" 
        // to a[index]. 
        for (int curr = a[index] - maximum + 1; 
             curr <= a[index]; curr++) 
            cout << curr << " "; 
    } 
      
    // كود التشغيل
    int main() 
    { 
        int a[] = { 3, 10, 3, 11, 4, 5, 6, 7, 8, 12 }; 
        int n = sizeof(a) / sizeof(a[0]); 
        longestSubsequence(a, n); 
        return 0; 
    } 

     

     

    بتاريخ 8 ساعات قال ماجد قطوسة:

    أهلاً بك 

    هذا برنامج يطبع لك الأعداد المتتابعة في مصفوفة معينة ، مشروح فيه كل خطوة بخطوتها باللغة الإنجليزية ،  يمكنك الإستفادة منه لحل المشكلة الخاصة بك فهي شبيهة الى حد كبير من هذا البرنامج ،  فقط قم باستبدال الارقام  من 0-9 الى الارقام 0 1 ،  و قم بفحص اذا كان العدد الحالي يسواي 1 أو لا ، و اذا كان بالفعل يساوي  1 تقم بإضافته الىت المصفوفة الجديدة ، و هكذا حتى تنتهي من جميع الأرقام المدخلة في البرنامج . 

    
    // برنامج لطباعة أطول مصفوفة متتالية من الأرقام 
    
    #include <bits/stdc++.h> 
    using namespace std; 
      
    // function that returns the length of the 
    // longest increasing subsequence 
    // whose adjacent element differ by 1 
    void longestSubsequence(int a[], int n) 
    { 
        // stores the index of elements 
        unordered_map<int, int> mp; 
      
        // stores the length of the longest 
        // subsequence that ends with a[i] 
        int dp[n]; 
        memset(dp, 0, sizeof(dp)); 
      
        int maximum = INT_MIN; 
      
        // iterate for all element 
        int index = -1; 
        for (int i = 0; i < n; i++) { 
      
            // if a[i]-1 is present before i-th index 
            if (mp.find(a[i] - 1) != mp.end()) { 
      
                // last index of a[i]-1 
                int lastIndex = mp[a[i] - 1] - 1; 
      
                // relation 
                dp[i] = 1 + dp[lastIndex]; 
            } 
            else
                dp[i] = 1; 
      
            // stores the index as 1-index as we need to 
            // check for occurrence, hence 0-th index 
            // will not be possible to check 
            mp[a[i]] = i + 1; 
      
            // stores the longest length 
            if (maximum < dp[i]) { 
                maximum = dp[i]; 
                index = i; 
            } 
        } 
      
        // We know last element of sequence is 
        // a[index]. We also know that length 
        // of subsequence is "maximum". So We 
        // print these many consecutive elements 
        // starting from "a[index] - maximum + 1" 
        // to a[index]. 
        for (int curr = a[index] - maximum + 1; 
             curr <= a[index]; curr++) 
            cout << curr << " "; 
    } 
      
    // كود التشغيل
    int main() 
    { 
        int a[] = { 3, 10, 3, 11, 4, 5, 6, 7, 8, 12 }; 
        int n = sizeof(a) / sizeof(a[0]); 
        longestSubsequence(a, n); 
        return 0; 
    } 

     

     

    في الحقيقة صديقي.. تجد أن هذه السؤال يحتوي على بعض التعقيد... مع الشرح.. 

    لهذا احتاج البرنامج جاهزا..

    @عبود سمير ..

    ما اقصده هو الاحتمال  الأول 

     

      أن المطلوب هو البحث عن أطول عنصر في المصفوفة مكون من العدد 1 مثلا لو عندنا المصفوفة التالية [11,000,11111,111] يعطيك البرنامج العدد 11111.

  2. @محمد ربيع زليول 

    فكرة السؤال صحيحة.. 

    لكن كيف اقوم بكتابة المصفوفة؟ 

    @محمد ربيع زليول

    شكرا صديقي... تم تنفيذ البرنامج... 

    لكن لدي سؤال اخر... 

    ارجو حله أيضا.. 🙏

    اكتب برنامج لقراءة a[10]

    بحيث قيم عناصرها تكون عبارة عن اصفار ووحدات جد واطبع أطول عدد للواحدات المتتالية فيها؟

    • أعجبني 1
×
×
  • أضف...