![ישן](https://static.fresh.co.il/images/vBulletin/statusicon/post_old.gif)
09-11-2009, 22:32
|
![צלמית המשתמש של Narxx](image.php?u=51003&dateline=1217968379) |
|
|
חבר מתאריך: 21.12.04
הודעות: 30,021
|
|
זה נורא מסורבל... המערכים (או מחרוזות, שזה גם מערך) מאוד מקלים את העבודה בלולאות.
הרעיון הוא להגיע סדרתית לכל מספר ומספר ע"י לולאת for, ע"י היעזרות באינדקס של הלולאה.
זה בערך מה שהצלחתי לעשות (וזה עובד) בלי להשתמש בכלל במערכים או מחרוזות:
קוד PHP:
#include <stdio.h>
int main() { int result = 0, input, one = 0, two = 0, three = 0, four = 0, five = 0, six = 0, seven = 0, eight = 0; int nine = 0, zero = 0, temp, flag = 1, i; printf ("Enter a number: "); scanf ("%d", &input); temp = input; input = 0; while (temp) { input = input*10 + temp %10; // switch direction of input temp /= 10; // 1234 will become 4321 } while (input) { temp = input % 10; // check whether current number has already been seen. if (temp == 1) {one++; if (one > 1) flag = 0;} // if flag = 0, we have seen else if (temp == 2) {two++; if (two > 1) flag = 0;} // this number before, so else if (temp == 3) {three++; if (three > 1) flag = 0;} // it won't be a part of the else if (temp == 4) {four++; if (four > 1) flag = 0;} // answer. else if (temp == 5) {five++; if (five > 1) flag = 0;} // An array would be a much else if (temp == 6) {six++; if (six > 1) flag = 0;} // more ellegant solution else if (temp == 7) {seven++; if (seven > 1) flag = 0;} // but... I was not allowed else if (temp == 8) {eight++; if (eight > 1) flag = 0;} // to use it... else if (temp == 9) {nine++; if (nine > 1) flag = 0;} else if (!temp) {zero++; if (zero > 1) flag = 0;} if (flag) { result = result*10 + input % 10; } input /= 10; flag = 1; } printf ("Result: %d\n", result); scanf ("%d", &input); // <-- to pause the command line from closing return 0; }
זה דרש ממני הרבה עבודה ידנית בבדיקה של ספרה אם היתה קיימת בעבר או לא, וגם קצת מניפולציה על המספר שהתקבל (הפכתי את הסדר שלו כיוון שאת הבדיקה שלי אני עושה מהספרה הימנית לשמאלית, ואילו בתרגיל הספרה החשובה היא דווקא השמאלית... הייתי צריך להפוך את המספר בלולאה הראשונה, ואז השיטה שלי של לעבור מימין לשמאל - עבדה טוב).
מסורבל, אבל עובד.
זו בדיוק הסיבה שמשתמשים במערכים כשצריך ![Smile](images/smilies/smile.gif)
|