כותב |
|
תNר אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 22 November 2007 בשעה 21:18 | | IP רשוּם
|
|
|
|
צריכה לכתוב תכנית שתקבל רשימה וערך סכום, ותדפיס את כל התתי קבוצות שקיימות ברשימה ושוות לערך סכום.
לדוגמא:
קלט: [1,2,5,3,2] :קבוצה ערך סכום: 5
פלט: [1,2,2] [2,3] [5] [3,2]
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 22 November 2007 בשעה 21:42 | | IP רשוּם
|
|
|
|
לא הבנתי משהו אחד נגיד ויוצא לי פלט בסדר אחר ? לדוגמה : קלט: [1,2,5,3,2] :קבוצה ערך סכום: 5
פלט : [5] [2,3] [3,2] [1,2,2]
זה גם בסדר ? כי ככה אולי אני יודע לפתור
אבל בכול מקרה הפתרון לתרגיל הזה אני ב 99% אחוז שהוא פעולה רקורסיבית
|
חזרה לתחילת העמוד |
|
|
תNר אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 22 November 2007 בשעה 23:03 | | IP רשוּם
|
|
|
|
זה לא משנה הסדר של התתי קבוצות.
אז- איך פותרים את זה?
<חשבתי על רקורסיה, אבל לא הצלחתי>
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 23 November 2007 בשעה 13:51 | | IP רשוּם
|
|
|
|
אוקיי, תקראי, תלמדי באופן כללי, ותשפצרי לשימושך.
לא לחדול באמצע!
קישור
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 24 November 2007 בשעה 01:37 | | IP רשוּם
|
|
|
|
הנה הפתרון הכי טוב שאני הצלחתי להגיע אליו בעזרת פונקציה אחת :
קוד:
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()); } } } } }
|
|
|
אני בטוח שיש משהו הרבה יותר טוב וגם לזה לקח לי הרבה זמן להגיע לזה , אבל בכול מקרה יש לי שאלה למי שטוב בכול השאלות האלה לגבי כול התרגילים האלה של רקורסיה שהם לפי דעתי שאלות דיי קשות ( לא נגיד כמו למצוא חזקה או עצרת בעזרת רקורסיה אלא דברים יותר מורכבים ) יש איזה שיטה שיטה "סודית" שאני לא יודע שהופכת את סוג השאלות הזה לקל או או משהו כזה , זה מזכיר לי תמיד כוח ברוטלי מישהו יכול להסביר באופן כללי איך פותרים את הסוג הזה של שאלות כי אני כמעט אף פעם לא הצלחתי :\ חוץ מזאת וגם בקושי ?
|
חזרה לתחילת העמוד |
|
|
תNר אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 25 November 2007 בשעה 01:15 | | IP רשוּם
|
|
|
|
תודה.
אפשר הסבר מילולי מה הפונקציה הרקורסיבית עושה?
מה התנאי עצירה?
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 25 November 2007 בשעה 12:40 | | IP רשוּם
|
|
|
|
בעיקרון אם (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 ) ?
|
חזרה לתחילת העמוד |
|
|
inHaze משתמש פעיל
הצטרף / הצטרפה: 23 November 2006 מדינה: Israel
משתמש: מנותק/ת הודעות: 119
|
נשלח בתאריך: 27 November 2007 בשעה 05:10 | | IP רשוּם
|
|
|
|
decimal כתב:
יש איזה שיטה שיטה "סודית" שאני לא יודע שהופכת את סוג השאלות הזה לקל או או משהו כזה , זה מזכיר לי תמיד כוח ברוטלי מישהו יכול להסביר באופן כללי איך פותרים את הסוג הזה של שאלות כי אני כמעט אף פעם לא הצלחתי :\ חוץ מזאת וגם בקושי ? |
|
|
תשובה: קורס מבני נתונים והמון תרגול ( ואח"כ קורס אלגוריתמים ואלגוריתמים מתקדמים שמפתחים עוד יותר את סוג המחשבה הדרוש לתרגילים כאלה ), מה שכן זה לא בא בקלות לאף אחד...
__________________ הבלוג שלי
|
חזרה לתחילת העמוד |
|
|
|
|