פורסם 2012 בדצמבר 712 שנים · כתוב מתודה אשר מקבלת את מערכים A ו B , בודקת אם A מוכל שלא ברצף ב B. המתודה מחזירה משתנה בוליאני בערך מתאים לתוצאת הבדיקה. public static boolean CheckContainment(int a[], int b[]){ int count = 0; for(int i = 0; i<a.length; i++){ for (int k = 0; k<b.length; k++){ if(b[k] == a[i]){ count++; break; } } } if (count == a.length){ return true; } return false;עכשיו הבעיה היא למשל אם מערך A הוא למשל (1,2,2,3) ומערך B הוא (1,2,3,4) זה עדין יתן לי TRUE מכיוון שהמספר 2 מופיע במערך B, אבל אני צריך שהוא יופיע שם פעמיים...אשמח לעזרה
פורסם 2012 בדצמבר 712 שנים ^לא כ"כ הבנתי למה אתה מתכוון, הרי K הוא אינדקס של הלולאה.יש כל מיני דרכים לפתור את זה. תחשוב על מערך של ביטים באורך המערך B אשר מסמן עבור התא המקביל ב-B האם השתמשת בו או לא.
פורסם 2012 בדצמבר 712 שנים לא מסכים איתך. יש פתרון הרבה הרבה יותר פשוט ממה שאתה מכוון אליו. והוא לא מצריך הגדרת מערך נוסף, אלא רק ניהול אינדקסים חכם יותר ממה שלולאת for עושה בעצמה.
פורסם 2012 בדצמבר 712 שנים עכשיו כשאני קורא שוב את השאלה, יכול להיות שהוא התכוון שאם a הופיע לפני b במערך A הוא יופיע כך גם ב-B.במקרה הזה K יקודם עד שהתו ימצא ובאיטרציה הבאה ימשיך משם.
פורסם 2012 בדצמבר 912 שנים מחבר בסופו של דבר מה שעשיתי זה הרצתי בדיקות על שתי המערכים , מצאתי את המספר הכי גדול מבין שניהם והגדרתי אותו כ temp כאשר בלולאה שמשווה איברים , נצמא איבר זהה, הוא מחליף אותו ב temp+1 - מספר שבטוח לא יופיע באף מערך. ככה הכל עובד כמו שצריך public static boolean CheckContainment(int a[], int b[]){ int count = 0; int temp = b[0]; for (int j = 1; j<b.length; j++) { if (b[j] > b[j-1]){ temp = b[j]; } } for (int y = 0; y<a.length; y++){ if (temp < a[y]){ temp = a[y]; } } for(int i = 0; i<a.length; i++){ for (int k = 0; k<b.length; k++){ if(b[k] == a[i]){ count++; b[k] = temp+1; break; } } } if (count == a.length){ return true; } return false; }
פורסם 2012 בדצמבר 912 שנים פתרון יפה ויצירתי (לקח לי דקה להבין מה עשית ולמה).עם זאת כמה דברים חשובים:1. כמדומני, בג'אווה, העברת מערכים כפרמטר למתודה דינה כהעברת אובייקט כפרמטר. משמע, כל שינוי שתעשה במערך (החלפת איברים בtemp+1) תשמר גם אחרי שהמתודה תסתיים. אתה צריך להזהר בדברים כאלה בתכנות. אם יהיה שימוש נוסף במערכים הללו בתוכנית, התוכנית תיפול. שוב, אין פסול בפתרון שלך, אבל בפתרון שבו יש צורך להחליף ערכים במערך תשתמש במערך עזר שהוא העתק של המערך המקורי.2. בעוד שאהבתי את הפתרון שלך, יש פתרון קל ממנו שכולל לולאה מקוננת אחת. אני ממליץ לך לנסות למצוא את הפתרון הזה (ולו רק בשביל להבין/ללמוד). הקוד שלו מאוד מאוד דומה לפתרון הראשון שלך, אבל הוא בעל ניהול אינדקסים מעט שונה.
פורסם 2012 בדצמבר 912 שנים מחבר הערה טובה עמית. תודה. בגללל שיש לי איטרציה אחת בלבד עם המערך הזה בתוכנית אפילו לא חשבתי על זה
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.