נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: תתי קבוצות ברשימה

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
תNר
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 22 November 2007 בשעה 21:18 | IP רשוּם
ציטוט תNר

צריכה לכתוב תכנית שתקבל רשימה וערך סכום, ותדפיס את כל התתי קבוצות שקיימות ברשימה ושוות לערך סכום.

 

 לדוגמא:

קלט:
[1,2,5,3,2] :קבוצה
ערך סכום: 5

פלט:
[1,2,2]
[2,3]
[5]
[3,2]

חזרה לתחילת העמוד הצג את כרטיס החבר של תNר חפש הודעות אחרות של תNר בקר בדף הבית של תNר
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 22 November 2007 בשעה 21:42 | IP רשוּם
ציטוט decimal

לא הבנתי משהו אחד נגיד ויוצא לי פלט בסדר אחר ? לדוגמה :
קלט:
[1,2,5,3,2] :קבוצה
ערך סכום: 5

פלט :
[5]
[2,3]
[3,2]
[1,2,2]

זה גם בסדר ? כי ככה אולי אני יודע לפתור

אבל בכול מקרה הפתרון לתרגיל הזה אני ב 99% אחוז שהוא פעולה רקורסיבית
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
תNר
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 22 November 2007 בשעה 23:03 | IP רשוּם
ציטוט תNר

זה לא משנה הסדר של התתי קבוצות.

אז- איך פותרים את זה?

<חשבתי על רקורסיה, אבל לא הצלחתי>

חזרה לתחילת העמוד הצג את כרטיס החבר של תNר חפש הודעות אחרות של תNר בקר בדף הבית של תNר
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 23 November 2007 בשעה 13:51 | IP רשוּם
ציטוט shoshan

אוקיי, תקראי, תלמדי באופן כללי, ותשפצרי לשימושך.

לא לחדול באמצע!


קישור

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 24 November 2007 בשעה 01:37 | IP רשוּם
ציטוט decimal

הנה הפתרון הכי טוב שאני הצלחתי להגיע אליו בעזרת פונקציה אחת :
קוד:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
  {
        static void Main(string[] args)
        {
            Console.Write("number : ");
            int num = int.Parse(Console.ReadLine());
            Console.Write("numbers : ");
            int listLength = int.Parse(Console.ReadLine());
            int[] a = new int[listLength];
            ReadArray(a);
            GetGroups(a, num, num, 0, 0, "");
        }
        static void GetGroups(int[] a, int num, int original, int master, int index, string combo)
        {
            if ((index == a.Length) || (master == a.Length))
            {
                if (master < a.Length)
                {
                    GetGroups(a, original, original, master + 1, master + 1, "");
                }
            }
            else
            {
                if (num == a[index])
                {
                    Console.WriteLine(combo + a[index]);
                    GetGroups(a, original, original, master + 1, master + 1, "");
                }
                else
                {
                    if (a[index] > num)
                    {
                         GetGroups(a, num, original, master, index + 1, combo);
                    }
                    else
                    {
                         GetGroups(a, num - a[index], original, master, index + 1, combo + a[index] + ",");
                    }
                }
            }
        }
        static void ReadArray(int[] a)
        {
            int i;
            for (i = 0; i < a.Length; i++)
            {
                Console.Write("list[" + i + "]" + " : ");
                a[i] = int.Parse(Console.ReadLine());
            }
        }
    }
}
}

אני בטוח שיש משהו הרבה יותר טוב וגם לזה לקח לי הרבה זמן להגיע לזה , אבל בכול מקרה יש לי שאלה למי שטוב בכול השאלות האלה לגבי כול התרגילים האלה של רקורסיה שהם לפי דעתי שאלות דיי קשות ( לא נגיד כמו למצוא חזקה או עצרת בעזרת רקורסיה אלא דברים יותר מורכבים ) יש איזה שיטה שיטה "סודית" שאני לא יודע שהופכת את סוג השאלות הזה לקל או או משהו כזה , זה מזכיר לי תמיד כוח ברוטלי מישהו יכול להסביר באופן כללי איך פותרים את הסוג הזה של שאלות כי אני כמעט אף פעם לא הצלחתי :\ חוץ מזאת וגם בקושי ?
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
תNר
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 25 November 2007 בשעה 01:15 | IP רשוּם
ציטוט תNר

תודה.

אפשר הסבר מילולי מה הפונקציה הרקורסיבית עושה?

מה התנאי עצירה?

חזרה לתחילת העמוד הצג את כרטיס החבר של תNר חפש הודעות אחרות של תNר בקר בדף הבית של תNר
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 25 November 2007 בשעה 12:40 | IP רשוּם
ציטוט decimal

בעיקרון אם (master == a.Length) אז אין שום הוראה וזה מפסיק , וככה הפוקנציה עובדת :
זה כאילו ריצה אחת שלה עד התנאי עצירה :
5 - 1,2,5,3,2 (1)
4 - 2,5,3,2 (2)
2 - 5,3,2 (!)
2 - 3,2 (!)
2 - 2 (2)
@ - @
הסבר : אם המספר במקום הנוכחי גדול מהמספר הנדרש עוברים למספר הבא
אם הם שווים זהו מצאנו סכום מתאים ואז מדפיסים את כול המחרוזות שמכילה את המספרים שהצטברה
ואם הוא קטן יותר מהאיבר שאנו רוצים ואז אנחנו מחסרים את המספר הנוכי מהסכום שאנחנו מחפשים אנחנו גם מסחרים אותו ממנו ( נגיד 5-1 ) ואז כבר המשכנו עם 4 וגם ההעברנו למספר הבא כדי להמשיך
ה ! משמעות היא שהמספר הנוכחי גדול יותר מזה אנחנו מחפשים ואז מעבירים למספר הבא
אגב - האלגוריתם הזה צריך לעבוד גם על מספרים שליליים נגיד עבור חיפוש של 7 הוא ידפיס גם ( 5,3,-1 ) ?
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
inHaze
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 23 November 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 119
נשלח בתאריך: 27 November 2007 בשעה 05:10 | IP רשוּם
ציטוט inHaze

decimal כתב:
     
יש איזה שיטה שיטה "סודית" שאני לא יודע שהופכת את סוג השאלות הזה לקל או או משהו כזה , זה מזכיר לי תמיד כוח ברוטלי מישהו יכול להסביר באופן כללי איך פותרים את הסוג הזה של שאלות כי אני כמעט אף פעם לא הצלחתי :\ חוץ מזאת וגם בקושי ?

תשובה: קורס מבני נתונים והמון תרגול ( ואח"כ קורס אלגוריתמים ואלגוריתמים מתקדמים שמפתחים עוד יותר את סוג המחשבה הדרוש לתרגילים כאלה ), מה שכן זה לא בא בקלות לאף אחד...



__________________
הבלוג שלי
חזרה לתחילת העמוד הצג את כרטיס החבר של inHaze חפש הודעות אחרות של inHaze
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה