כמה דברים לפני שאני רושם את הזוכה ואת הפתרון...חבל שכמות המשתתפים היתה מזערית...חבל שהרבה לא מנסים...אולי האתגר הבא יהיה משהו יותר פשוט (אבל ככה יהיו גם הרבה תשובות נכונות ואיפה האתגר?)
בכל זאת ...הגישו 3 פתרונות בסה"כ...מתוכם היו 2 נכונים (66 אחוז זה מכובד)...חח..בכל זאת...
על השאלה...כדי לפתור את השאלה הזאת היה צריך להבין מה היא בעצם פרמוטציה...או כמו שאומרים לחקור עד השורש..רק שכאן זה יותר פשוט ופה בעצם היה כל האתגר למרות שאם מתיישבים כמה דקות וחושבים עולים על זה ישר ויש כאלו שיגידו גם שאין על מה לעלות וזה ברור מאליו..
מתוך ה3 פתרונות 2 היו נכונות..עכשיו אני יסביר מה הוביל אותי לפתרון המנצח או בעצם מה שבר את התיקו בין שתי הפתרונות...(הרי יש רק מנצח אחד)
אז ככה..ואם כבר מסבירים מהי תוכנית טובה (או תוכניתן) שיהיה מפורט ומן היסוד..
הדבר הראשון שנמדד בתוכנית אם היא מבצעת את הנדרש...פה שתי התוכניות הנכונות עשו את הנדרש ולכן שתיהם קודם כל תוכניות שעובדות כראוי וזה כבר משהו ואפילו משהו גדול..
אחר כך תוכנית נמדדת ביעילותה מבחינת סדר זמן (או במונחים רשמיים - זמן ריצה) את זמן הריצה מודדים ביחסיות לקלט..בשתי התוכניות זמן הריצה היה
O(n^2)..
מיכיוון שגם עד לכאן שתי התוכניות הם שוות...עוברים לקריטריון הבא שהוא יחידות זיכרון (נכון שקיום אין בעיה של מקום אבל זה עדיין קרטריון חשוב ויעיל וגם משפיע בסופו של דבר על זמן הריצה)..
בקרטריון הזה היתה תוכנית שהתעלת על התוכנית השניה (למשל מחיקת זיכרון למשל העברה בREFERENCE ולא BY VALUE וכדומה)..
פרט לכך התוכנית היעילה מבחינת הזיכרון היתה יותר מאורגנת וקצרה וזה יתרון מבחינת קריאת הקוד (אבל אני חייב לציין ששתי התוכניות היו מתועדות בצורה טובה)...ולכן החלטתי להעניק את הנצחון לתוכנית זאתי..
אז אחרי כל הדיבורים...
המנצח הוא: the_jackass אני מניח שהמנהלים יתגמלו אותך באיזה פרס 
והנה התוכנית שלו: funcs.cpp -------------- #include "Funcs.h"Funcs::Funcs() { int n; cin>>n; m_iN=n; m_piArr=new int; } Funcs::~Funcs() { delete m_piArr; } bool Funcs::good_per(int *arr,int m) { int max,min,i; max=arr; min=arr; for (i=1;i<m;i++) { if (arr>max) max=arr; else if (arr<min) min=arr; else return false; } return true; } void Funcs::print(int place) { int i; if (place==m_iN) { for (i=0;i<m_iN;i++) cout<<m_piArr<<' '; cout<<endl; } else { bool ok; for (i=1;i<=m_iN;i++) { m_piArr=i; ok=good_per(m_piArr,place+1); if (ok==true) print(place+1); } } } funcs.h ------------- #ifndef _FUNCS_H_ #define _FUNCS_H_ #include <iostream.h> class Funcs { private: int m_iN; //the number int *m_piArr; //thr array in wich the permutation is build public: Funcs();//c-tor - gets the number from the user and builds the array ~Funcs();//d-tor - deletes the array bool good_per(int *arr,int m);// checks if a permutation is by the rules void print(int place);// prints all the permutations }; #endif
main.cpp ---------- #include <iostream.h> #include "Funcs.h" void main() { Funcs a; a.print(0); cin.get(); cin.get(); }
|
במקום השני: Gold Dragon
עם תוכנית מעולה..ואם היה אפשר שתי זוכים גם אתה היית זוכה...