06-12-2006, 02:17
|
|
|
|
חבר מתאריך: 15.08.06
הודעות: 465
|
|
אני אכתוב בC ברשותך [אין לי כוח כרגע לפסקל, לא נגעתי בזה שנתיים וחצי, מאז הבגרות :)]
כתבתי לך פתרון כללי, שאינו דורש תנאים רבים, עבור N שטרות, שלכל אחד מהם בהתאמה הערך
a_1, a_2, ... , a_n, טבעיים.
בשביל להמנע מתנאים רבים, הגדר מערך עזר דו מימדי
קוד:
int arr[N][2]={{...},...,{...}};
כאשר arr[k][0] יאכסן כמה שטרות מסוג k יש,
ו arr[k][1] יאכסן מה ערך השטר מסוג k.
עכשיו, גם אין לך בכלל תנאים, וגם יש לך פתרון כללי
תעשה כך:
קוד PHP:
#include <stdio.h> #include <math.h> #define N 3
int arr[N][2] = {{1,20} , {8,50} , {1,100} };
int Set(int Amount){ int howmany; for (int i=N-1; i>=0; i--){ howmany=arr[i][0]; arr[i][0] = (howmany - Amount/arr[i][1] + fabs((float)howmany-Amount/arr[i][1]))/2; Amount = Amount - (howmany-arr[i][0])*arr[i][1]; } return Amount; }
int main(int argc, char *argv[]) { int i; for (i=0; i<N; i++) printf("%d - %d\n", arr[i][1], arr[i][0]); printf("\nAFTER...\n\n"); int HowMuchLeft = Set(420); for (i=0; i<N; i++) printf("%d - %d\n", arr[i][1], arr[i][0]); printf("\nAmount left that cannot be payed with those kinds of coins: %d", HowMuchLeft); } }
הפונקציה Set מוציאה כמה שצריך מכל תא במערך, ומחזירה כמה נשאר (אם נשאר סכום שקטן מהשטר הקטן ביותר).
אבל, סביר להניח שאתה לא יכול להגיש ככה, כי אתה לא רוצה מקרה כללי, ולא רוצה להגדיר שום מערך עזר, כי הרי - זה שיעורי הבית שלך...
לכן, פשוט, במקום הפונקציה Set למקרה הכללי שכתבתי, החלף אותה בזה:
קוד PHP:
int Set(int Amount){ int howmany,shtar; for (int i=N-1; i>=0; i--){ howmany=arr[i]; if (i==0) shtar = 20; else if (i==1) shtar = 50; else shtar = 100; arr[i] = (howmany - Amount/shtar + fabs((float)howmany-Amount/shtar))/2; Amount = Amount - (howmany-arr[i])*shtar; } return Amount; }
_____________________________________
Any sufficiently advanced bug is indistinguishable from a feature
|