נשלח בתאריך: 20 November 2010 בשעה 12:15 | | IP רשוּם
|
|
|
|
אני מנסה לבנות תוכנה שמחשבת לגבי משחק מסוים אם אני יכול לנצח בטוח או לא. הפרטים המדוייקים לא חשובים.
הפונקציה כתובה בצורה רקורסיבית.
אני מנסה להגדיר counter כלשהו שיספור את הפעולות הרקורסיביות שנעשות בפונקציה וכך לקבוע אם תורי או תור היריב.
אם counter%2==0 אז תורי, אם counter%2==1 אז תור היריב.
הבעיה היא שנעשות כמה קריאות רקורסיביות לאותה הפונקציה בתוך הפונקציה כך שהcounter שלי לא אמין.
האם יש לי דרך אחרת לברר אם תורי או תור היריב? או האם אני יכול לפתור את בעיית הcounter?
הקוד:
public class Tests {// test for function matches public static void main(String[] args) { int numOfMaches = 20; int x = 2; int y = 6; boolean anss=false; anss=matches(numOfMaches,x,y); System.out.print(anss); } /******************** Task 1 ********************/ static int counter=0; public static boolean matches(int numOfMatches, int x, int y){ boolean ans = false; if (numOfMatches==1 || numOfMatches==x || numOfMatches==y){ if (counter%2==0) ans=true; if (counter%2==1) ans=false; } else{ counter=counter+1; if (numOfMatches<0) ans=false; else{ if (counter%2==0){ if (matches(numOfMatches-1,x,y)==true) numOfMatches=numOfMatches-1; else { if (matches(numOfMatches-x,x,y)==true) numOfMatches=numOfMatches-x; else{ if (matches(numOfMatches-y,x,y)==true) numOfMatches=numOfMatches-y; } } } else{//if counter%2==1 matches(numOfMatches-1,x,y); matches(numOfMatches-x,x,y); matches(numOfMatches-y,x,y); } } } return ans; } }
הפונקציה בודקת משחק גפרורים בו יש 20
גפרורים על השולחן (יכול להיות מספר אחר) ושני שחקנים משחקים. כל שחקן יכול
לקחת 1 או x או y גפרורים (במקרה הנ"ל x=2, y=6). מנצח מי שבתורו לקח את
כל הגפרורים שנשארו (צריך לקחת בדיוק 1, 2 או 6).
הפונקציה מחזירה "אמת" אם יש לי דרך בטוחה לנצח בהינתן מס' גפרורים מסויים, ו-"שקר" אם אין לי דרך בטוחה.
כל עזרה תתקבל בברכה, אני יושב על זה כבר יותר מ-4 שעות רצוף ולא מצאתי פיתרון לבעיית ה-counter.
|