راکت
حل شده

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

8 پاسخ

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

مسئله این:(به زبان جاوا)
برنامه اي بنويسيد كه تمامي حالتهائي كه مي توان مبلغ 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

ممنون

ثبت پرسش جدید

پاسخ‌ها

8
میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

بهترین پاسخ

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

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

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

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

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

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);
میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

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

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
reza_yki
@rezayki

تخصص: طراح و برنامه نویس سمت کلاینت Angular و همچنین با وردپرس هم میونه خوبی دارم و براش قالب میزنم :)

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

reza_yki
reza_yki
@rezayki

تخصص: طراح و برنامه نویس سمت کلاینت Angular و همچنین با وردپرس هم میونه خوبی دارم و براش قالب میزنم :)

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

        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
Alimotreb
@Alimotreb

تخصص: کانفیگ سرور و برنامه نویس

سلام
@rezayki

@milad احسنت...

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

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

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

reza_yki
reza_yki
@rezayki

تخصص: طراح و برنامه نویس سمت کلاینت Angular و همچنین با وردپرس هم میونه خوبی دارم و براش قالب میزنم :)

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

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام