שאלה על מערכים, C++

נירש

New member
שאלה על מערכים, C++

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

sadov

New member
פתרון

תגדיר מערך דו מימדי חדש(מאותו type) בגודל 2 * 1/3 מגודל המערך המקורי (7 במיקרה שלך). שורה אחת במערך החדש עבור המיספרים(כל מספר מופיע פעם אחת) ושורה שניה מונה את מספר ההופעות של כל מספר במערך המקורי. עכשיו אתה סורק את המערך המקורי ועבור כל מספר אתה בודק האם קיים במערך החדש. אם לא קיים: מכניס אותו למערך ונותן למונה שלו ערך 1 אם קיים: מוסיף 1 למונה שלו. בסוף אתה סורק את המערך החדש ומדפיס רק את המספרים שהמונה שלהם >= 3.
 

ליאור ב

New member
מה קורה במצב?

מה קורה במצב שאין אף מספר שחוזר על עצמו, איפה כולם יכנסו במערך? 1/3*2 לא יספיק במידה והמערך הוא 20 מספרים שונים. יתכן שלא הבנתי את הסבר הפתרון? תקנו אותי אם אני טועה. ליאור.
 

sadov

New member
תיקון טעות

צודק ליאור, טעות שלי המערך החדש צריך להיות 2*20(גודל המערך המקורי)
 

darkstar

New member
אתה יכול בבקשה להעלות את הקוד?

אתה יכול לתת לי את הקוד של הפיתרון למה לא הצלחתי בעצמי
 

dudil

New member
אפשרות אחת מיני רבות

int main(int argc, char* argv[]) { int Arrey[20]={1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,5,6,9,3}; int Sum[20]={0}; for (int i=0;i<19;i++) { for (int j=i;j<19;j++) { if (Arrey==Arrey[j]) Sum++; } } while(i>0) { Sum[i--]>=3?printf("Number that appear 3 times or more is:%d\n",Sum):0; } return 0; }
 

dudil

New member
אופס, שני תיקונים

לולאות FOR צריכות לספור עד 20 שורת ההדפסה כזו:
Sum[i--]>=3?printf("Number that appear 3 times or more is:%d\n",Arrey[i+1]):0;​
 
למעלה