lirany משתמש מתחיל
הצטרף / הצטרפה: 15 March 2005
משתמש: מנותק/ת הודעות: 49
|
נשלח בתאריך: 23 June 2005 בשעה 19:51 | | IP רשוּם
|
|
|
|
פונקציה המקבלת ארבעה מספרים: sum, a, b, וc, כולם גדולים מ 0. נתון כי a b ו c קטנים (כל אחד מהם) מ sum. על הפונקציה למצוא את כל האופנים בהם ניתן לקבל את sum תוך סכימה של a, b ו c.
עבור כל אופן שכזה – על הפונקציה להדפיס שורה מתאימה – ראו בדוגמת ההדפסה שכאן. אין כל הגבלה על מספר הפעמים בהם ניתן להשתמש בכל אחד מהמספרים a, b ו c. ה prototype של הפונקציה: void find(int sum, int a, int b, int c);
אני מעוניין לשפר את הקוד שנכתב בכך שלא יבוזבז זמן מחשב על חיפושי צירופים שברור כי אין להם סיכוי.ובכלל קוד הקצר ביותר
קוד:
#include <stdio.h>
#include <conio.h>
void find(int,int,int,int);
int main()
{
int sum,a,b,c;
clrscr();
printf("enter the sum: ");
scanf("%d",&sum);
printf("\nenter 3 numbers: ");
scanf("%d%d%d",&a,&b,&c);
find(sum,a,b,c);
getch();
return 0;
}
void find(int sum , int a,int b,int c)
{
int i,j;
for(i=0 ; i<sum ; i++)
for(j=0 ; j<sum-i*a-j*b ; j++)
if((sum-(i*a+j*b))%c==0)
printf("%d can be achieved by: %d of %d, %d of %d,
%d of %d\n",
sum, i, a, j ,b, (sum-i*a-j*b)/c,c);
}
|
|
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 24 June 2005 בשעה 21:08 | | IP רשוּם
|
|
|
|
לגבי התוכנית, כן.. אתה נכנס ברקורסיה, ואם אתה מגיע למצב שאתה כבר יודע
שהמצב לא חוקי ואין טעם להמשיך, אתה פשוט חוזר שלב אחורה ומנסה אפשרות
נוספת, וככה אתה מסנן אפשרויות שבברור אינן רלוונטיות
__________________ מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
|