Logo

רד-בורד: ארכיון

ראשי > תיכנות > [C] עזרה באלגוריתמיקה

06/10/2006 22:33:09 TheShadow
אני צריך ליכתוב פונקציה המקבלת מספר טבעי ומחזירה 1 אם כל הספרות המספר שונות זו מזו או 0 אם זה לא נכון
יש לי התחלה אין לי מושג אך להמשיך
קוד:
int im_yesh_hazarot(int n1)
int n2 (אני יודע שצריך עוד מישטנים אבל לחלק שלי צריך רק n2)
n2=n1//כדי לא לעבד את המיספר
while(n2!=0)
{
n2=n2%10;
c++;//בדיקה של האורך המיספר
}
n2=n1//החזרת המספר למישתנה n2

מפה אני לא יודע לאן להמשיך אני כבר ישבתי על זה הרבה זמן



ההודעה נערכה על-ידי TheShadow ב-06/10/2006 22:34:11]

[ההודעה נערכה על-ידי TheShadow ב-07/10/2006 13:38:50][ההודעה נערכה על-ידי tal ב-10/10/2006 01:28:28]
06/10/2006 22:41:18 nickless
מה יש לך נגד סגירת תגים?![ההודעה נערכה על-ידי nickless ב-06/10/2006 22:42:48]
06/10/2006 23:20:30 TheShadow
נגד מה?!
07/10/2006 15:30:07 HLL
אתה קצת טועה פה במה שכתבת
הדרך הנכונה לעבור ספרה ספרה במספר היא לקבל את הספרה עצמה (נקרא לא d) עי מודולוס של המספר המקורי ב10
אבל אז צריך כוויכול לקצץ את המספר כדי שהלולאה לא תבדוק שוב את אותה הספרה, זה עושים ע"י הצבה מחדש במספר, את המספר המחולק ב 10 ללא שארית
קוד:while(n2!=0){
dig=n2%10;

//Do some stuff

n2=n2/10;
}
עכשיו לגבי הבדיקה עצמה, הדרך הכי טובה לדעתי זו לתפוס ספרה אחת מתוך המספר בתחילת הפונקצייה ואז לבדוק כל הזמן עם dig זהה לספרה הנ"ל...

בהצלחה.
07/10/2006 21:00:44 ziv
אפשר עם שיטה פשוטה:
להכין מערך עם 10 מקומות כאשר האינדקס הוא מספר הספרה.
לעבור ספרה ספרה ולהכניס את הספרה לאינדקס המתאים ולבדוק האם כבר נכנס שם המספר.
הדגמה:
קוד:
int f(int n2)
{
int a[10]={0};
while(n2 != 0)
{
if(a[n2%10] == 1)
return 0;
else
a[n2%10] = 1;
a /= 10;
}
return 1;
}


[ההודעה נערכה על-ידי ziv ב-07/10/2006 21:02:00][ההודעה נערכה על-ידי ziv ב-10/10/2006 23:21:21]
10/10/2006 21:54:42 HLL
לא יעיל בעליל!!
10/10/2006 23:12:58 ziv
מה לא יעיל?! למי הפנת את אי היעילות?(רמז: לא כדי שזה יהיה אלי) :)
עמודים: 1