29-01-2009, 02:46
|
מנהל
|
|
חבר מתאריך: 26.07.08
הודעות: 6,473
|
|
ציטוט:
תתבונן:
"בסדר עולה כלומר כל תא קטן או שווה לתא שאחריו בשורה, והתא האחרון בשורה גם כן קטן מהאיבר הראשון בשורה הבאה שלו (של התת מערך)."
|
איזה מוזר , חשבתי שכתבתי תוצאה אחרת...
אוקי אז בנוגע לפיתרון:
תיעזר במה שכתבתי בהודעתי האחרונה:
ציטוט:
קודם כל תבדוק מהו האיבר הראשון בשורה השנייה, כלומר מה הגודל שלו.
אח"כ תסרוק את השורה הראשונה מהאיבר האחרון אל האיבר הראשון, ותנסה למצוא את האיבר ששווה\קטן מהאיבר הראשון בשורה השנייה. ואז תבדוק אם האיברים שלפניו (לפניו מבחינת המיקום במערך \ אינדקס) קטנים ממנו. אם כן אז יש לך תוצאה בשורה אחת, אם לא אז תמשיך לסרוק את השורה...
|
אבל במקביל לנ"ל, תיצור מערך דו-מימדי (נקרא לו arr_info) בגודל מספר השורות שיש לך במערך ה-input, כאשר כל תת-מערך אצלו הוא בגודל 2 איברים - האיבר הראשון מצביע על ה-offset של המספר הראשון בסידרה, והאיבר השני מצביע על גודל הסידרה (כמה איברים מתאימים מצאת עבור שורה ספציפית, בהתאם לחוקיות הנדרשת בתרגיל).
אחרי שתמלא את arr_info בנתונים, תחפש בו את הערך של גודל הסידרה הקטן ביותר, ובהתאם לכך תשלוף את הנתונים החל מה-offset המתאים בכל תת-מערך שנמצא במערך ה-input.
עריכה:
אולי זה יעזור להבין טוב יותר:
קוד:
The input - 2 Dimensional array:
7 4 2 0 1
8 1 2 3 5
2 7 9 11 13
1 12 14 28 30
int arr_info[4];
// arr_info[/* row index */] = {/* offset */, /* series length */}
arr_info[0] = {NULL, 0} // Because that there's no match in the first row
arr_info[1] = {1, 3}
arr_info[2] = {1, 3}
arr_info[3] = {1, 3}
נערך לאחרונה ע"י dorM בתאריך 29-01-2009 בשעה 02:53.
|