כותב |
|
danikel משתמש מתחיל
הצטרף / הצטרפה: 19 December 2008 מדינה: Israel
משתמש: מנותק/ת הודעות: 32
|
נשלח בתאריך: 22 January 2009 בשעה 17:57 | | IP רשוּם
|
|
|
|
שלום, אז ככה,אני מנסה לכתוב תוכנה שתדפיס כמה איברים שונים יש במערך, עוד לא מצאתי כיוון כלשהוא, חשבתי על 3 לולאות,אבל אני חושב שאפשר עם פחות, אבל גם עם 3 לא יוצא לי, מישהו יכול לתת לי כיוון חשיבה? אני לא רוצה פתרון מלא, אני מעדיף לחשוב לבד, אז כדי שאני לא אגלוש רחוק מדי, אני צריך כיוון. הבעיות שנתקלתי: בהתחלה ניסיתי עם 2 לולאות וזה עבר לי יותר מדי על המערך,ואז השתשובה הייתה שגויה, אז ניסיתי להשוות בין תא 0 לשאר,אבל אז הבנתי שיכול להיות שתא 0 שונה מכולם אבל האחרים שווים, צחקתי על עצמי בקול גדול(באנגלית זה נשמע יותר מצחיק :)) 3 לולאות זה כיוון טוב?
__________________
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 22 January 2009 בשעה 19:15 | | IP רשוּם
|
|
|
|
כיוון אפשרי: מערך שני (או רשימה, או כל מבנה נתונים שנוח לך) שישמור איזה איברים מצאת. כל פעם שאתה מוצא איבר חדש קודם תבדוק שאין אותו ברשימת האיברים שכבר מצאת, ואז תכניס לרשימה. כשתסיים ספור את המערך השני.
__________________ מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
|
חזרה לתחילת העמוד |
|
|
danikel משתמש מתחיל
הצטרף / הצטרפה: 19 December 2008 מדינה: Israel
משתמש: מנותק/ת הודעות: 32
|
נשלח בתאריך: 22 January 2009 בשעה 21:19 | | IP רשוּם
|
|
|
|
רעיון מעולה :) אז זה ממש לא קשה,אני חשבתי מותר לי רק מערך אחד :< אתה חושב שיש אפשרות לעשות רק במערך אחד?
__________________
|
חזרה לתחילת העמוד |
|
|
danikel משתמש מתחיל
הצטרף / הצטרפה: 19 December 2008 מדינה: Israel
משתמש: מנותק/ת הודעות: 32
|
נשלח בתאריך: 23 January 2009 בשעה 14:26 | | IP רשוּם
|
|
|
|
הצלחתי עם מערך אחד!
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication86 { class Program { static void Main(string[] args) { int[] ar = new int[10]; int count = 10, i, j; for (i = 0; i < 10; i++) ar[i] = int.Parse(Console.ReadLine()); for (i = 0; i < 9; i++) { for (j = i + 1; j < 10; j++) { if (ar[i] == ar[j]) { count--; break; } } } Console.WriteLine(count); Console.ReadLine(); } } }
} } }
__________________
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 24 January 2009 בשעה 11:37 | | IP רשוּם
|
|
|
|
תסביר את הרעיון - לא בטוח שהקוד מכסה הכל
__________________ מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
|
חזרה לתחילת העמוד |
|
|
danikel משתמש מתחיל
הצטרף / הצטרפה: 19 December 2008 מדינה: Israel
משתמש: מנותק/ת הודעות: 32
|
נשלח בתאריך: 24 January 2009 בשעה 14:47 | | IP רשוּם
|
|
|
|
ניר כתב:
תסביר את הרעיון - לא בטוח שהקוד מכסה הכל
|
|
|
גם אני בהתחלה חשבתי שזלא כיסיתי הכל, אבל אחרי כמה בדיקות הכל יצא נכון,אבל אני אסביר: קודם כל עשיתי מערך של 10 סתם כדי לבדוק. יצאתי מנקודת הנחה שכל המספרים הם שונים(COUNT=10) הכנסתי מספרים למערך. עכשיו, עבור כל איבר אני בודק האם הוא מופיע עוד פעם,ברגע שאני רואה שהוא הופיע אני מוריד מהספירה אחד, ואז יש לי 9 איברים שונים ,אבל אם הוא ימשיך לעבד את המערך הוא יוריד עוד פעם מהספירה, נניח עד ל4, ואז אם המספר אחריו הוא אותו מספר,הוא ימשיך את הספירה מ-4 והרי הוא מופיע עוד 4 פעמים אז הוא יוריד עוד 4,וכן הלאה, לכן כדי להמנע מזה, אני עוצר את הלולאה ברגע שיש איבר דומה,לאחר מכן אני עובר לאיבר הבא,בודק אם הוא מופיע עוד פעם ברגע שאני רואה שמופיע מוריד מהספירה ומפסיק ת'לולאה וכן הלאה. בוא ניקח לדוגמא: 1,3,2,4,3,2,1,3,2,1
משמאל לימין, התשובה צריכה להיות 4. count=10 (אני אשתמש במספר איבר במקום אינדקס) האיבר הראשון הוא אחד, הלולאה מגיעה עד האיבר ה7, מורידה מCOUNT ועוצרת. count=9 איבר שני 3 , הלולאה מגיעה עד האיבר ה-5 מורידה מקאונט ועוצרת Count=8 איבר שלישי 2, מגיע עד לאיבר שישי מוריד אחד ועוצר. COUNT=7 איבר רביעי 4, לא מוריד מקאונט ועובר לאיטרציה הבאה. איבר חמישי 3, מגיע עד איבר 8 מוריד ועוצר. COUNT=6 איבר שישי 2 מגיע לאיבר 9 מוריד ועוצר. COUNT=5 איבר שביעי 1 מגיע לאיבר 10 מוריד ועוצר. COUNT=4 איבר שמיני,תשיעי לא מורידים כלום :) ואת העשירי אני לא בודק
הרעיון היה להתגבר על זה שאם יש לי 2,2,2,2,2,2,2,2,2 שהתשובה לא תהיה מינוס 50 XD
__________________
|
חזרה לתחילת העמוד |
|
|
ארנון אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 29 January 2009 בשעה 17:46 | | IP רשוּם
|
|
|
|
עוד כיוון אפשרי בשבילך: 1) מיון המערך. 2) אתחול count ל-1 והגדלתו ב-1 כל עוד האיבר הבא שונה מן האיבר הנוכחי.
|
חזרה לתחילת העמוד |
|
|
danikel משתמש מתחיל
הצטרף / הצטרפה: 19 December 2008 מדינה: Israel
משתמש: מנותק/ת הודעות: 32
|
נשלח בתאריך: 30 January 2009 בשעה 22:58 | | IP רשוּם
|
|
|
|
זה היה הכיוון ההתחלתי שלה, אבל היישום שלו לא עובד טוב, אם הבנתי תא מה שאמרת, למקרה כזה : 3,2,3,2,3,2,1,2,3 התוצאה תהיה יותר גדולה מ-3.
__________________
|
חזרה לתחילת העמוד |
|
|
ארנון אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 31 January 2009 בשעה 11:51 | | IP רשוּם
|
|
|
|
התוצאה תהיה שלוש, נלך לפי השלבים: 1) מיון המערך:
2) כאשר count מאותחל ל-1, נגדיל אותו ב-1 כל עוד האיבר הבא שונה מהאיבר הנוכחי:
קוד:
1>2 -> count++ 2>3 -> count++ |
|
|
קיבלנו count = 3.
|
חזרה לתחילת העמוד |
|
|
danikel משתמש מתחיל
הצטרף / הצטרפה: 19 December 2008 מדינה: Israel
משתמש: מנותק/ת הודעות: 32
|
נשלח בתאריך: 31 January 2009 בשעה 14:41 | | IP רשוּם
|
|
|
|
אהה נחמדש מאוד, פשוט לא הבנתי מה זה מיון המערך :) איך אני ממיין בצורה כזאת את המערך?
__________________
|
חזרה לתחילת העמוד |
|
|
ארנון אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 31 January 2009 בשעה 16:29 | | IP רשוּם
|
|
|
|
יש כל מני סוגי מיון... נלך על מיון בועות בסיסי:
קוד:
for (int a = 0; a < arr.Length; a++) for (int b = 0; b < arr.Length -1; b++) if (arr[b] > arr[b+1]) { int temp = arr[b]; arr[b] = arr[b+1]; arr[b+1] = temp; } |
|
|
|
חזרה לתחילת העמוד |
|
|
|
|