שאלה קשה לי אליכם

Agent008

New member
שאלה קשה לי אליכם

מישהו מוכן להראות לי סקריפט שמוצא במערך את הסדרה העולה הגדולה ביותר של מספרים (וגם מציג אותה?) המספרים במערך נקבעים על ידי המתכנת, לא נקלטים. כך שאם מערך $I מכיל (5,1,2,3,4,5,1,2,3,1,5,6,3,2,2,4,6,1,2,4123,1) הפלט יהיה סדרת המספרים העולה הגדולה ביותר מכילה 5 מספרים. הם: 1,2,3,4,5 פליז הלפ. בתודה מראש, אני.
 

XiroX

New member
פתרון מגעיל:

<? $s=sizeof($l); $k=0 for ($i=1;$i<=$s;$i++) //this loop marks the begginnig, end and length of each series { if ($l[$i]>$l[$i-1]) { $arr[$k]['start']=$i-1; for ($j=$i;$j<$s;$j++) if ($l[$j]<=$l[$j-1]) break; $arr[$k]['end']=$j; $arr[$k]['length']=($arr[$k][$end]-$arr[$k][$start]); }; }; $a=0; for ($i=0;$i<=sizeof($arr);$i++) { if ($arr[$i]['length']>$a) { $a=$arr[$i]['length']; $num=$i; }; }; ?>​
כמו שאמרתי, פתרון מגעיל ביותר, על בטוח אפשר הרבה יותר טוב מזה, אבל אין לי ממש כח לחשוב על אחד כזה. הוא מחזיר לך ב num את המקום במערך arr שבו יש את הפרטים על תחילת וסוף הסדרה כך שלא צריך להיות לך בעיה להדפיס אותה אחכ. דרך אגב, מתוך עצלנותץ, הפתרון מניח שאין 2 סדרות באותו אורך. אם יש, הוא יחזיר רק את האחרונה מאותו אורך.
 

XiroX

New member
אה

שכחתי להגדיל את K. צריך להגדיל אותו כל פעם אחרי שהוא מכניס את length.
 

kensaggy

New member
פתרון יותר פשוט ו"אלגנטי"....

הנה קוד שכתבתי צ'יק צ'ק כי דיי שעמם לי
סה"כ הוא דיי ברור , לא נראה לי שיהיו לך בעיות איתו.. בדקתי אותו על המערך שסיפקת ועל עוד מערך נוסף שהמצאתי וניכר כי הוא עובד.. בבקשה:
<?php $arr = array(5,1,2,3,4,5,1,2,3,1,5,6,3,2,2,4,6,1,2,4123,1); function longestSeries(&$arr,&$start_pos, &$end_pos) { /* Initing Variables */ $start_pos = 0; $end_pos = 0; $i = 0; $tmp_lenght = 1; $lenght = 1; /******/ while($i <= count($arr)) { if (($arr[$i+1]) > ($arr[$i])) { $i++; $tmp_lenght++; } else { if ($tmp_lenght > $lenght) { $lenght = $tmp_lenght; $end_pos = $i; $start_pos = $i -$lenght; } $tmp_lenght = 0; $i++; } } } $start_pos = 0; $end_pos =0 ; $pos = longestSeries($arr,$start_pos,$end_pos); echo "The longest series starts at [$start_pos] and ends at [$end_pos] of the \$arr array\n"; ?>​
אם אתה לא מבין משהו , תשאל חופשי
בהצלחה בהמשך, חן.
 

kensaggy

New member
לא שמתי לב בדיוק...

לא שמתי לב בדיוק לדרישות...אבל לא נורא.. הפונקציה במחזירה (ב reference) את מיקום ההתחלה ומיקום הסיום של הסדרה הגדולה ביותר. (ולא את הסדרה עצמה) אבל כאשר יש לך את המיקומים זה כבר ממש לא בעיה להמשיך משם ולהדפיס את הסדרה. -חן.
 
למעלה