reza_yki
5 سال پیش توسط reza_yki مطرح شد
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

ممنون


ثبت پرسش جدید
میلاد-م
تخصص : توسعه‌دهنده رابط کاربری - Fron...
@milad 5 سال پیش آپدیت شد
0

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

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

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


میلاد-م
تخصص : توسعه‌دهنده رابط کاربری - Fron...
@milad 5 سال پیش آپدیت شد
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);

میلاد-م
تخصص : توسعه‌دهنده رابط کاربری - Fron...
@milad 5 سال پیش آپدیت شد
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
تخصص : طراح و برنامه نویس سمت کلاینت...
@rezayki 5 سال پیش آپدیت شد
1

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


reza_yki
تخصص : طراح و برنامه نویس سمت کلاینت...
@rezayki 5 سال پیش آپدیت شد
2

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

        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 5 سال پیش مطرح شد
2

سلام
@rezayki

@milad احسنت...


میلاد-م
تخصص : توسعه‌دهنده رابط کاربری - Fron...
@milad 5 سال پیش آپدیت شد
1

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

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


reza_yki
تخصص : طراح و برنامه نویس سمت کلاینت...
@rezayki 5 سال پیش مطرح شد
2

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


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

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