שתי חידות אלגוריתמים

avivRT

New member
../images/Emo41.gif שתי חידות אלגוריתמים

1 ------------------------ Write a program (or explain how to do it) that will display a descending "spiral" of NxN numbers, using constant space (no arrays allowed). For example, here's what the spiral looks like for N=10: 99 98 97 96 95 94 93 92 91 90 64 63 62 61 60 59 58 57 56 89 65 36 35 34 33 32 31 30 55 88 66 37 16 15 14 13 12 29 54 87 67 38 17 4 3 2 11 28 53 86 68 39 18 5 0 1 10 27 52 85 69 40 19 6 7 8 9 26 51 84 70 41 20 21 22 23 24 25 50 83 71 42 43 44 45 46 47 48 49 82 72 73 74 75 76 77 78 79 80 81 2 ---------------------- Suppose you want to make a random 9 digit number, using every number from 1 to 9 exactly once. You have a process called random(top) that gives a random number up to top (if top was 5, it would give random numbers from 1 to 5) assume top couldn't be more than 9, how could you do this using random(top) only 9 times (or less)?
 

avivRT

New member
../images/Emo4.gif יצא לא כ"כ ברור

אבל נראה לי שזה עדיף על התרגום שלי לעברית של השאלות האלה
. מי שרוצה לתרגם לעברית מוזמן לעשות זאת. *בשאלה השנייה היה סעיף ששאל כיצד ניתן בכלל ליצור מספר עם 9 ספרות שונות והשמטתי אותו כי זו לא בעיה ליצור מספר כזה. הבעיה היא להשתמש במינימום קריאות ל()random.
 

טיקטי

New member
אולי 2:

ליצור רשימה להכניס אליה את המספרים להגריל מספר מ-1 עד-9 ואז ללכת לתא שהאינדקס שלו יצא ב- random(9) לכתוב אותו ולמחוק את התא שלו ואז להגריל מספר מ-1 עד-8 ולעשות את אותו דבר עד למספר האחרון שבו אני אלך ישר לתא מספר 1 ואז כל התהליך דורש "רק" 8 פעמים
 

swirrrly

New member
הסבר נוסף, ../images/Emo118.gif../images/Emo176.gif

בבקשה........:\ כי אתם חביבים [?]
:-|)
 

mili999

New member
המיוחד בשבילך, שירלי..

בהתחלה מגרילים מספר בין 1 ל-9. אח"כ נשארו 8 מספרים וצריך להגריל אחד מהם, אז מגרילים מספר בין 1 ל-8 ולפי זה קובעים איזה מספר ייבחר. הפעם אם ייצא לנו מספר מסוים לא נבחר בהכרח אותו. אנחנו נסדר את כל המספרים שלנו ברשימה מ-1 עד שמונה, ואם יוצא לנו מספר 7, למשל, אז ניקח את השביעי מהרשימה. כלומר, אם בפעם הראשונה יצא לנו 4, אז: אם ייצא לנו 3 נבחר 3, אם ייצא 4 נבחר 5, אם ייצא 5 נבחר 6, וכו'... שאר ההסבר שלהם זה כבר איך לממש את זה ובשביל זה צריך לדעת מושגים בתכנות: הם בחרו בלקחת רשימה מקושרת וכל פעם להעיף את המספר הנבחר. כמובן שאחרי שמגרילים מספר מתוך 8 מגרילים מספר מתוך 7 וכו'...
 

swirrrly

New member
../images/Emo51.gif../images/Emo24.gif ../images/Emo118.gif../images/Emo176.gif

אני חושבת שאני אעבד את זה עוד קצת בראש..
 

swirrrly

New member
../images/Emo51.gif../images/Emo24.gif ../images/Emo118.gif../images/Emo176.gif

אני חושבת שאני אעבד את זה עוד קצת בראש..
 

avivRT

New member
../images/Emo13.gif הסבר נוסף בבקשה:

אנחנו רוצים לייצר מספר בעל 9 ספרות שכל ספרה(מ-1 עד 9) מופיעה בו פעם אחת. לשם כך נשתמש בפונקצית random שמחזירה לנו מספר אקראי שהוא קטן או שווה לגבול מסוים שקבענו. למשל (4)random תחזיר אחד מהמספרים 1,2,3 או 4. המטרה היא להשתמש כמה שפחות פעמים בפונקציה הזאת. הפתרון: מתחילים עם המחרוזת "123456789" ומגרילים מספר אקראי עם (9)random. כעת לוקחים מתוך המחרוזת את הספרה שהמיקום שלה זה מה שיצא בrandom. למשל אם הפונקציה random החזירה 3 אז ניקח את הספרה 3 מתוך המחרוזת והיא תהיה הספרה הגדולה (השמאלית ביותר) במספר שאותו אנחנו יוצרים. כעת נצמצם את המחרוזת שהתחלנו איתה למחרוזת "12456789" ונגריל שוב מספר אקראי עם (8)random כי המחרוזת עכשיו היא באורך 8. שוב, ניקח את הספרה שנמצאת במיקום שהrandom נתן ונשים אותה במספר אותו אנחנו יוצרים ונמצמצם את המחרוזת ונמשיך כך עד שנגיע ל (2)random. בסוף תישאר ספרה אחת בלבד במחרוזת והיא תהיה הימנית ביותר במספר שאנחנו יוצרים. סה"כ הפעלנו את random 8 פעמים.
 

mili999

New member
שיהיה..

בהתחלה רצים צעד שמאלה וצעד למעלה אח"כ 2 צעדים ימינה ו-2 למטה. אח"כ 3 שמאלה ו-3 למעלה. בכל צעד רושמים את המספר הבא. יש אינסוף דרכים לממש
 
אבל כנראה

אי אפשר להדפיס בסדר הזה, רק מלמעלה למטה (ומשמאל לימין). לכן גם התנאי לא לבנות מערכים.
 
למעלה