کمک در حل مسئله خرد کردن پول

- 1 هفته پیش
توسط reza_yki آپدیت شد
reza_yki ( 1985 تجربه )
1 هفته پیش

سلام و وقت بخیر
بنده مسئله ای دارم که میدونم بیشتر کسایی که رشته کامپیوتر خوندن با همچین موردی برخورد کردن :)

مسئله این:(به زبان جاوا)
برنامه اي بنويسيد كه تمامي حالتهائي كه مي توان مبلغ 100 ریال را با سکه های ۱، ۲ و ۵ ریالی پرداخت نمود، را توليد و چاپ نمايد.
من کد زیر رو نوشتم ولی اصلا وارد شرط نمیشه نمیدونم کجا اشتباه دارم:

        for (one = ۰; one <= ۵; one++) {
            for (two = ۰; two <= ۲; two++) {
                for (five = ۰; five <= ۱; five++) {
                    result = (one) + (two * ۲) + (five * ۵);
                    System.out.println(result);
                    if (result == ۱۰۰) {
                        System.out.println(" one " + one + " two " + two + " five " + five);
                        conter++;
                    }
                }
            }
        }

        System.out.println(" تعداد حالت ها: " + conter);

الان خروجی زیر رو چاپ میکنه:

0
5
2
7
4
9
1
6
3
8
5
10
2
7
4
9
6
11
3
8
5
10
7
12
4
9
6
11
8
13
5
10
7
12
9
14
 تعداد حالت ها: 0

ممنون

بهترین پاسخ انتخاب شده توسط reza_yki
میلاد
1 هفته پیش

با سلام
من که متوجه نشدم کد شما به لحاظ منطقی چطور قراره راه حل این مسئله باشه.

توضیح راه حل:
راه حل خودم رو همراه با کد ارائه میدم.
سه حلقه داریم، حداکثر تعداد سکه های 5 ریالی می تواند 19 تا باشد، حداکثر تعداد 2 ریالی ها 47 تا و حداکثر تعداد 1 ریالی ها 93 تا.
جمع می زنیم و شرط می ذاریم، اگر از صد رد شدش، از حلقه خروج کنه، اگر صد شدش هم خروجی رو چاپ کنه، اگر کمتر از صد شدش هم تعداد سکه مورد نظر رو زیاد میکنیم تا یا به خود صد برسیم و یا از صد رد بشه.
sum_help: محاسبه مجموع بر اساس سکه های 5 ریالی و 2 ریالی است.
sum: محاسبه مجموع بر اساس هر سه نوع سکه (5، 2 و 1 ریالی) است.
(برای اینکه هریک از سکه ها لااقل یکی ازشون داشته باشیم، حلقه ها از عدد یک شروع می شوند)

کدها و خروجی ها در ادامه آمده اند.

میلاد ( 57980 تجربه )
1 هفته پیش

با سلام
من که متوجه نشدم کد شما به لحاظ منطقی چطور قراره راه حل این مسئله باشه.

توضیح راه حل:
راه حل خودم رو همراه با کد ارائه میدم.
سه حلقه داریم، حداکثر تعداد سکه های 5 ریالی می تواند 19 تا باشد، حداکثر تعداد 2 ریالی ها 47 تا و حداکثر تعداد 1 ریالی ها 93 تا.
جمع می زنیم و شرط می ذاریم، اگر از صد رد شدش، از حلقه خروج کنه، اگر صد شدش هم خروجی رو چاپ کنه، اگر کمتر از صد شدش هم تعداد سکه مورد نظر رو زیاد میکنیم تا یا به خود صد برسیم و یا از صد رد بشه.
sum_help: محاسبه مجموع بر اساس سکه های 5 ریالی و 2 ریالی است.
sum: محاسبه مجموع بر اساس هر سه نوع سکه (5، 2 و 1 ریالی) است.
(برای اینکه هریک از سکه ها لااقل یکی ازشون داشته باشیم، حلقه ها از عدد یک شروع می شوند)

کدها و خروجی ها در ادامه آمده اند.

میلاد ( 57980 تجربه )
1 هفته پیش

کدها به زبان جاوااسکریپت:

let sum;
let sum_help;
let counter = 0;
for(let num5=1; num5<20; num5++) {    
    for(let num2=1; num2<48; num2++) {        
        sum_help = 0;
        sum_help = num5*5 + num2*2;
        if(sum_help>99) { break; }
        else {
            for (let num1=1; num1<94; num1++) {
                sum = 0;
                sum = sum_help + num1;
                if (sum==100) {
                    console.log(num5 + " Five Riraly " + num2 + " Two Rialy " + num1 + " One Rialy");
                    counter++;
                    break;
                }                
            }
        }
    }
}
console.log("count of all states: " + counter);
میلاد ( 57980 تجربه )
1 هفته پیش

برخی خروجی ها هم نمایش میدم:

1 Five Riraly 1 Two Rialy 93 One Rialy
1 Five Riraly 2 Two Rialy 91 One Rialy
1 Five Riraly 3 Two Rialy 89 One Rialy
1 Five Riraly 4 Two Rialy 87 One Rialy
1 Five Riraly 5 Two Rialy 85 One Rialy
...
18 Five Riraly 3 Two Rialy 4 One Rialy
18 Five Riraly 2 Two Rialy 6 One Rialy
18 Five Riraly 1 Two Rialy 8 One Rialy
19 Five Riraly 2 Two Rialy 1 One Rialy
19 Five Riraly 1 Two Rialy 3 One Rialy
count of all states: 461
reza_yki ( 1985 تجربه )
1 هفته پیش

سلام
@milad عزیز
میدونستم به نکته ساده توجه نکردم ولی نه در این حد خخخ فقط یه مشکلی هست اونم اینه که باید از تمامی سکه ها استفاده بشه و نمیتونیم 100 سکه 1 ریالی رو فقط استفاده کردپس باید سکه ها رو هم بررسی کنیم که حداقل بزرگتر از 0 باشند
ممنون مشکلم رو حل کردید :)

reza_yki ( 1985 تجربه )
1 هفته پیش

کد رو هم اینجا قرار میدم شاید به درد یکی خورد :)

        int result = 0, conter = 0, one, two, five;

        for (one = 1; one <= 100; one++) {
            for (two = 1; two <= 50; two++) {
                for (five = 1; five <= 20; five++) {
                    result = (one) + (two * 2) + (five * 5);
                    if (result == 100) {
                        System.out.println(" one " + one + " two " + two + " five " + five);
                        conter++;
                        break;
                    }
                }
            }
        }

        System.out.println(" تعداد حالت ها: " + conter);

نتیجه هم این شکلی میشه:

 one 1 two 2 five 19
 one 1 two 7 five 17
 one 1 two 12 five 15
 one 1 two 17 five 13
...
  one 88 two 1 five 2
 one 89 two 3 five 1
 one 91 two 2 five 1
 one 93 two 1 five 1
 تعداد حالت ها: 461
Alimotreb ( 91342 تجربه )
1 هفته پیش

سلام
@rezayki

@milad احسنت...

میلاد ( 57980 تجربه )
1 هفته پیش

@Alimotreb و @rezayki
خواهش می کنم، سلامت باشید

در صورت مسئله ابتدایی اشاره نکرده بودید که باید حداقل از هرکدوم یکی باشه؛ ولی نیاز به تغییر خاصی هم نداره. کافیه هر سه حلقه رو به جای صفر، از یک شروع کرد. اینجوری حداقل عدد یک رو در بر می گیرند.
(تغییرات ریزی که لازمه رو انجام دادم و جواب ها تصحیح شدند)

reza_yki ( 1985 تجربه )
1 هفته پیش

@milad
درسته ممنون

برای ارسال پاسخ باید وارد سایت شوید