לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

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



  #1  
ישן 15-11-2009, 10:34
  משתמש זכר tsachibenezra tsachibenezra אינו מחובר  
 
חבר מתאריך: 06.06.07
הודעות: 749
שאלה ברקורסיה

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

תודה

השאלה

נתון תרמיל גב המסוגל לעמוד בעומס של
עבור כל אחד מהחפצים נתון משקלו. צריך לבדוק האם קיים צירוף כלשהו של חפצים המאפשר
לנצל במלואו את העומס המותר לתרמיל.
num - כתבו שיטה רקורסיבית בוליאנית המקבלת כפרמטרים את העומס המותר של התרמיל
אם ניתן לאסוף חפצים במשקל זהה true ומערך שיכיל את משקלות החפצים. השיטה תחזיר ערך
אם לא. כמו כן, השיטה תדפיס גם את משקלות החפצים false - לעומס המותר לתרמיל ו
המקיימים את התנאי (אם יש כאלה). אם יש יותר מצירוף אחד - יודפס אחד מהם.
חתימת השיטה -
קוד:
public static boolean isFillBag (int[] arr, int num)

אינכם רשאים לשנות את חתימת השיטה, אבל אתם יכולים להיעזר בשיטה נוספת פרטית שעושה
לשיטה זו. overload
אתם יכולים להניח שהמערך מלא במספרים שלמים חיוביים בלבד.
דוגמאות:

עבור M=10 ורשימת החפצים 20 3 10 1 14
השיטה תדפיס 10 יוחזר TRUE

עבור M=20 ורשימת החפצים 4 1 15 7 12 3 9
השיטה תדפיס 12 1 7 יוחזר TRUE

עבור M=12 ורשימת החפצים 18 5 3 11
יוחזר FALSE


השיטה צריכה להיות רקורסיבית ללא שימוש בלולאות בכלל!
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 15-11-2009, 14:30
  trialusert trialusert אינו מחובר  
 
חבר מתאריך: 25.09.09
הודעות: 63
בתגובה להודעה מספר 1 שנכתבה על ידי tsachibenezra שמתחילה ב "שאלה ברקורסיה"

הנה פתרון שרשמתי בשפת C# , אני שם לב שאתה משתמש בג'אבה אך השפות דומות מאוד:

קוד PHP:
 public static bool isFillBag(int[] arrint num)
{
    
bool isTrue false;

    for (
int i 0arr.Lengthi++)
        
isTrue isTrue || isFillBag(arrnumi0isTruestring.Empty);

    return 
isTrue;
}

private static 
bool isFillBag(int[] arrint numint iint countbool isTruestring series)
{
    if (
== arr.Length 1)
        
isTrue isTrue || false;

    
count += arr[i];
    
series += arr[i] + " ";

    if (
count num)
        
isTrue isTrue || false;

    else if (
count == num)
    {
        
Console.Write(series);
        return 
true;
    }

    for (
i+1;  arr.Lengthi++)
        
isTrue isTrue || isFillBag(arrnumicountisTrueseries);

        return 
isTrue;



בשביל לקבל True או False וגם רשימת מספרים מתאימה, הדפס כך:
קוד:
int[] arr = { 14, 1, 10, 3, 20 }; Console.WriteLine(isFillBag(arr, 10));
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #10  
ישן 17-11-2009, 06:46
  משתמש זכר tsachibenezra tsachibenezra אינו מחובר  
 
חבר מתאריך: 06.06.07
הודעות: 749
בתגובה להודעה מספר 9 שנכתבה על ידי trialusert שמתחילה ב "עבור כל אחד מהאיברים במערך..."

אני לא מצליח להגיע לבדיקה הגיונית
של כל הרצף..

אם יש לי מערך {40 ,4 ,6 ,12 ,1 ,20, 7}
40 זה הערך הראשון

אני רוצה לבדוק האם 14 נכנס פה??

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

הרצף הנכון צריך להיות 6,1,7

נגיד ועשינו את הבדיקות של 40 ו 4 על כל המערך ועשכיו אנחנו ב 6

הבדיקות הן

6+40 = 14 אם כן -נכון
אם לא 6+40 < 14 המשך אם לא זרוק את 40

6+4 = 14 אם כן - נכון
אם 6+4 < 14 המשך אם לא זרוק את 4

6+4+12 = 14 אם כן - נכון
אם לא 6+4+12 < 14 המשך אם לא זרוק את 12

6+4+1 = 14 אם כן - נכון
אם לא 6+4+1 < 14 המשך אם לא זרוק את 1

6+4+1+20 = 14 אם כן - נכון
אם לא 6+4+1+20 < 14 המשך אם לא זרוק את 20

6+4+1+7 = 14 אם כן - נכון
אם לא 6+4+1+7 < 14 המשך אם לא זרוק את 7

נשארתי עם 6+4+1 ופיספסתי את 6+1+7

תודה על העזרה
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #23  
ישן 21-11-2009, 19:15
  משתמש זכר tsachibenezra tsachibenezra אינו מחובר  
 
חבר מתאריך: 06.06.07
הודעות: 749
בתגובה להודעה מספר 22 שנכתבה על ידי trialusert שמתחילה ב "שמע, אתה עושה את זה הרבה יותר..."

בוא נעשה את זה יותר קל

תנסה לתקן לי את הקוד

תודה

אולי ככה אני אבין (לפי הקוד שלי)

קוד PHP:
 static int arrPosition 0;
    static 
boolean answer false;
    public static 
boolean isFillBag(int[] arrint num)
    {
        if(
arr[arrPosition] == arr.length)
        {
            return 
answer;
        }
        else if(
arr[arrPosition] == num)
        {
            
System.out.println(arr[arrPosition]);
            
answer true;
            return 
answer;
        }
        else if(
arr[arrPosition] < num)
        {
            
int count arr[arrPosition];
            
String values "" arr[arrPosition];
            
int position 0;
            
boolean isTrue false;
            
answer isFillBag(arrnumpositioncountisTruevalues);
        }
        if(!
answer)
        {
            
arrPosition++;
            
answer isFillBag(arrnum);
        }
        return 
answer;
    }
    
    public static 
boolean isFillBag(int[] arrint numint positionint countboolean isTrueString values)
    {
        if(
position == arr.length)
        {
            return 
isTrue;
        }
        else
        {
            
count += arr[position];
            
values += arr[position] + " ";
            
            if(
count == num)
            {
                
System.out.println(values);
                
isTrue true;
                return 
isTrue;
            }
            else if(
count num)
            {
                
position++;
                
isTrue isFillBag(arrnumpositioncountisTruevalues);
            }
            else
            {
                
isTrue false;
            }
            return 
isTrue;
        }
    } 
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #27  
ישן 23-11-2009, 10:14
  משתמש זכר tsachibenezra tsachibenezra אינו מחובר  
 
חבר מתאריך: 06.06.07
הודעות: 749
בתגובה להודעה מספר 26 שנכתבה על ידי trialusert שמתחילה ב "מה העניין של ה"בלי לולאות" ?..."

טוב גבר זה מה שעשיתי
יש לי בעיה קטנה של יעילות
אבל הקוד נותן לי תשובות טובות

אשמח שתעיף מבט

תודה

קוד PHP:
 public class ifFillBag 
{
    static 
int arrPosition 0;
    static 
boolean answer false;
    public static 
boolean isFillBag(int[] arrint num)
    {
        if(
arrPosition == arr.length)
        {
            return 
answer;
        }
        else if(
arr[arrPosition] == num)
        {
            
System.out.println(arr[arrPosition]);
            
answer true;
            return 
answer;
        }
        else if(
arr[arrPosition] < num)
        {
            
int count arr[arrPosition];
            
String values arr[arrPosition] + " ";
            
int position 0;
            
boolean isTrue false;
            
answer isFillBag(arrnumarrPositionpositioncountisTruevalues);
        }
        if(!
answer && arrPosition arr.length)
        {
            
arrPosition++;
            
answer isFillBag(arrnum);
        }
        return 
answer;
    }
    
    private static 
boolean isFillBag(int[] arrint numint arrPositionint positionint countboolean isTrueString values)
    {
        if(
position == arr.length)
        {
            return 
isTrue;
        }
        else
        {
            if(
position == arrPosition)
            {
                
position++;
                
isTrue isFillBag(arrnumarrPositionpositioncountisTruevalues);
            }
            else if(
count == num)
            {
                
System.out.println(values);
                
isTrue true;
                return 
isTrue;
            }
            else if(
count num)
            {                
                
count += arr[position];
                if(
count <= num)
                {                    
                    
values += arr[position] + " ";
                }
                else
                {
                    
count -= arr[position];
                }
                
position++;
                
isTrue isFillBag(arrnumarrPositionpositioncountisTruevalues);
            }
            else
            {
                
position++;
                
isTrue isFillBag(arrnumarrPositionpositioncountisTruevalues);
            }
            
            if(
position arr.length)
            {
                
position++;
                
isTrue isFillBag(arrnumarrPositionpositioncountisTruevalues);
            }
            
            return 
isTrue;
        }
    }

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 01:08

הדף נוצר ב 0.14 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר