בתגובה להודעה מספר 5 שנכתבה על ידי Dark Knight שמתחילה ב "טוב, זו חידה קצת יותר רצינית..."
פתרון מסובך שאני לא סגור שיפעל תמיד:
זהירות - ספויילר!
#define N 15
int NUMS[N] = {0,14,1,2,3,4,5,6,7,9,2,4,8,6,10};
void main()
{
int nCurrNum;
// Go over the array twice to make sure we didn't
// neglect any number when we made a switch
for (int x = 0; x < 2; ++x)
{
// Run through the entire array
for (int ii = 0; ii < N; ++ii)
{
// Set the current num we are working with
nCurrNum = NUMS[ii];
// The cell doesn't hold the appropriate value
if ((nCurrNum != ii) && (nCurrNum != -1))
{
// The value already exists
if (NUMS[nCurrNum] == nCurrNum)
{
cout << nCurrNum << endl;
NUMS[ii] = -1;
}
// Set the value into it's appropriate place
else
{
// Switch the nums
NUMS[ii] = NUMS[nCurrNum];
NUMS[nCurrNum] = nCurrNum;
}
}
}
}
}
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
בתגובה להודעה מספר 12 שנכתבה על ידי Anasurimbor שמתחילה ב "[right]פתרון מסובך שאני לא..."
א' - כואבות העיניים בלי indents, מזל ש-VS יודע לסדר את זה בעצמו
ב' - אני לא מבקש לכתוב תוכנית ממש, מספיק הסבר מילולי של אופן הפתרון, זו חידה, לא תרגיל בית
גם קל יותר להבין פתרון מילולי...
ג' - int main
ד' - עושה הרושם שהפתרון אכן עובד, כל הכבוד
בכל זאת, יש עוד דרך שבה אפשר גם לשחזר את המערך המקורי
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
בתגובה להודעה מספר 13 שנכתבה על ידי Dark Knight שמתחילה ב "א' - כואבות העיניים בלי..."
א - כתבתי ב VS והדבקתי פה... אני ממש לא מתכוון להוסיף לבד עכשיו שוב
ב - אם כבר אני פותר .. אז כבר נתרגם ישר לקוד (יותר קל לי, מי אמר שצריך להיות קל גם לכם )
ג - שטויות. באמת אבל באמת שטויות.
ד - הרצתי גם כמה פעמים ועבד..
דרך שמזכירה את האלגוריתם שלי או משהו מזווית אחרת לגמרי?
בתגובה להודעה מספר 14 שנכתבה על ידי Anasurimbor שמתחילה ב "א - כתבתי ב VS והדבקתי פה......"
הדרך שלי מזכירה את שלך אבל גם שונה במספר מובנים...
לפחות מבחינה עקרונית עלית על הרעיון
אגב, זה נכון שרב הקומפיילרים מתרגמים בעצמם את ה-void main ל-int main וחלקם אפילו לא יוצא על זה warning, אבל לא הייתי אומר שזו טעות שטותית... זה מראה חוסר הבנה רציני של מערכת ההפעלה...
בכל אופן, זה כבר לדיון אחר (שאני מאמין שנערך פה כבר מספר פעמים..)
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
בתגובה להודעה מספר 1 שנכתבה על ידי Dark Knight שמתחילה ב "שלום, הרבה זמן לא הייתי פה... חזרתי עם חידות :)"
הפתרון שלי במילים:
זהירות - ספויילר!
טוב, אני אסביר כאן במילים את הפתרון שלי
בכללי, אני משתמש במערך עצמו כדי לסמן איזה מספרים כבר היו:
אם למשל המספר הבא במערך הוא 7 (נגיד שזה ה-7 הראשון), אז התוכנית תלך לתא מס' 7 במערך, אם זה מספר חיובי, היא תכפיל אותו ב-(1-), ואם זה אפס, היא תציב שם (n+1).
אם התכנית תיתקל ב-7 פעם נוספת, היא תבדוק את תא 7 במערך, תראה שהמספר שלילי או גדול מ-n, ותדפיס את 7.
עכשיו, כיוון שהתאים במערך הם מ-0 עד(n-1), ואילו המספרים יכולים להיות מ-0 ועד n, נוסיף משתנה דגל אחד, כדי לסמן אם כבר היה n או לא היה. (לשפות בהם המערך מתחיל מ-1 ולא מ-0, כמו QBASIC, הדגל יהיה למקרה שניתקל ב-0 ולא ב-n).
בתגובה להודעה מספר 1 שנכתבה על ידי Dark Knight שמתחילה ב "שלום, הרבה זמן לא הייתי פה... חזרתי עם חידות :)"
לרגל סיום תקופת המבחנים שלי, חידה קשה במיוחד (ואחרונה לעת עתה..):
נתון מערך בגודל 2n+1 (גודל אי-זוגי) המכיל n זוגות מספרים ומספר נוסף כלשהו.
עליכם למצוא, במעבר אחד על המערך ובתוספת קבועה של זיכרון מיהו המספר חסר הזוג
תחום המספרים הוא int כלשהו...
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
בתגובה להודעה מספר 18 שנכתבה על ידי Dark Knight שמתחילה ב "לרגל סיום תקופת המבחנים שלי,..."
זהירות - ספויילר!
המממ מה עם לעשות משתנה INT שעבור כל אחד מתאי המערך נעשה לו XOR עם הערך בתא המסוים ואז בסופו של התהליך כל הזוגות יבטלו אחד את השני וישאר במשתנה הזה את הערך המבוקש?
ד"א רק להבהיר: XOR ביטי כמובן
והנה הקוד להמחשה:
זהירות - ספויילר!
const int SIZE = 11;
int arrnCouples[SIZE] = {55,12,12939,15,2,17,12939,17,55,12,2};
int nLonely = 0;
for (int ii = 0; ii < SIZE; ++ii)
{
nLonely ^= arrnCouples[ii];
}
cout << nLonely << " is the lonliest number after all." << endl;
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
נערך לאחרונה ע"י Anasurimbor בתאריך 08-09-2008 בשעה 09:47.
בתגובה להודעה מספר 21 שנכתבה על ידי Anasurimbor שמתחילה ב "אז בינתיים נוסיף חידות שכולם יהנו :)"
יש לי שני פתרונות.
פתרון אחד:
קוד:
a ^= b;
b ^= a;
a ^= b;
פתרון שני:
קוד:
a = a+b;
b = a-b;
a = a-b;
_____________________________________
Your signature did not follow Fresh's signatures policy, therefore it was automatically erased. Please see the E-Mail which has been sent to you, to learn how to fix this.
בתגובה להודעה מספר 22 שנכתבה על ידי PhoenixBoy שמתחילה ב "יש לי שני פתרונות.
פתרון..."
בבקשה שים רק בין תגי SPOILER כדי שעוד אנשים יוכלו להנות מהחידה..
נכון מאוד התשובה הראשונה היא המדויקת יותר מכיוון שהיא עובדת על ביטים ולכן היא כללית יותר
עכשיו חידה הבאה: נתונים שני מספרים שלמים A ו B - יש לכתוב קטע קוד קצר ככל הניתן שיחזיר את הגדול מביניהם מבלי להשתמש בתנאים בכלל (IF, For, While וכו' כולם אסורים).
תבלו
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
אני לא רואה איך זה שאתה מכריז שהחידה "טיפשית" מועיל למשהו. אתה יכול להגיד שהיא פגומה, לא מתוחכמת מספיק או משהו אחר.. אבל להגיד שהיא "טיפשית"? טוב זה משהו ממש טיפשי להגיד.
במקום להכריז הכרזות כאלה, אולי תתרום עוד חידות "לא טיפשיות" ?
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
בתגובה להודעה מספר 26 שנכתבה על ידי Anasurimbor שמתחילה ב "אני לא רואה איך זה שאתה מכריז..."
קיבלת הסבר על הבעיה בחידה - היא לא מוגדרת היטב (מה זה "פקודה" בכלל? פקודת אסמבלי? אסמבלי של איזה מעבד?), גם בהינתן הבהרות, אין שום קרונפיגורציה שבה היא פתירה (כי כשהמשתנים חופפים אתה נדפק חזק), ומכל הסיבות האלה, ואלה שמצוינות בלינק זו חידה פגומה לחלוטין.