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

السؤال

Recommended Posts

  • 0
نشر

أهلاً بك 

هذا برنامج يطبع لك الأعداد المتتابعة في مصفوفة معينة ، مشروح فيه كل خطوة بخطوتها باللغة الإنجليزية ،  يمكنك الإستفادة منه لحل المشكلة الخاصة بك فهي شبيهة الى حد كبير من هذا البرنامج ،  فقط قم باستبدال الارقام  من 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; 
} 

 

  • 0
نشر

مرحباً يونس ..
أنا لم أفهم جيداً ماذا تقصد ؟ هل تقصد أن المطلوب هو البحث عن أطول عنصر في المصفوفة مكون من العدد 1 مثلا لو عندنا المصفوفة التالية [11,000,11111,111] يعطيك البرنامج العدد 11111.
أم أن المطلوب مثلا يكون عندك مصفوفة بهذا الشكل [0, 1, 1, 0, 0, 1, 1, 1, 0] و يعطيك البرنامج السلسلة 111 و هذا ما فهمته من السؤال 
إذا كان هذا هو المطلوب يُمكنك كتابة البرنامج بالشكل التالي :
 


#include <iostream>
using namespace std;

// دالة مساعدة لطباعة عناصر مصفوفة عددية
void printArray(int arr[], int size)
{
    for (int i = 0; i < size; i++)
    {
        printf("%d ", arr[i]);
    }

    printf("\n");
}

// دالة تستقبل مصفوفة أعداد و ترجع سلسلة نصية مكونة من أطول سلسلة وحدات
string max_series(int arr[], int size)
{
    // تعريف المتغيرات المستعملة
    string l, tmp;
    int j, i = 0;
    // القيام بحلقة على عناصر المصفوفة
    while (i < size) {
        // إذا كان العنصر يساوي 1
        if (arr[i] == 1) {
            j = i;
            // القيام بحلقة مادامت العناصر القادمة تساوي 1
            while (arr[j] == 1) {
                // تركيب سلسلة الوحدات
                tmp += to_string(arr[j]);
                j++;
            }
            // شرط إذا كانت سلسلة الوحدات الحالية أطول من السلسلة المخزنة السابقة
            if (tmp.length() > l.length()) {
                l = tmp; // تغيير السلسلة السابقة بالسلسلة الحالية
                tmp = ""; // إفراغ السلسلة الحالية
            }

            i = j; // تغيير فهرس الحلقة
        } else {
            i++;
        }
    }
    return l;
}

int main() {
    // تعريف مصفوفة
    int arr[] = {0, 1, 1, 0, 0, 1, 1, 1, 1, 0};
    // حساب عدد القيم التي تحتويها المصفوفة
    int n = sizeof(arr) / sizeof(arr[0]);
    // طباعة عناصر المصفوفة
    printArray(arr, n);

    // إستدعاء الإقتران
    string l = max_series(arr, n);
    if (l.length() <= 0)
        cout << "array does not contains any 1";
    else
        cout << "serie: " << l << " ==> size: " << l.length();

}

و عند تشغيل البرنامج سيعطيك النتيجة التالية:
cpp_max_serie.thumb.PNG.3791bdd81646cea5557971d3151ed07f.PNG

يُمكنك تجربة البرنامج من خلال هذا: الرابط
بالتوفيق 

  • 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; 
} 

 

 

بتاريخ 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.

  • 0
نشر

• اكتب برنامجا يقرأ قائمة بالأعداد الصحيحة ويطبع ما إذا كان كل عدد صحيح أوليا أم لا. يجب أن يتوقف البرنامج عندمايقرأ 1 ثم يطبع العدد الإجمالي للأعداد الأولية المقروءة.

ممكن احد يفهمني

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...