سلام و وقت بخیر
بنده مسئله ای دارم که میدونم بیشتر کسایی که رشته کامپیوتر خوندن با همچین موردی برخورد کردن :)
مسئله این:(به زبان جاوا)
برنامه اي بنويسيد كه تمامي حالتهائي كه مي توان مبلغ 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
ممنون
با سلام
من که متوجه نشدم کد شما به لحاظ منطقی چطور قراره راه حل این مسئله باشه.
توضیح راه حل:
راه حل خودم رو همراه با کد ارائه میدم.
سه حلقه داریم، حداکثر تعداد سکه های 5 ریالی می تواند 19 تا باشد، حداکثر تعداد 2 ریالی ها 47 تا و حداکثر تعداد 1 ریالی ها 93 تا.
جمع می زنیم و شرط می ذاریم، اگر از صد رد شدش، از حلقه خروج کنه، اگر صد شدش هم خروجی رو چاپ کنه، اگر کمتر از صد شدش هم تعداد سکه مورد نظر رو زیاد میکنیم تا یا به خود صد برسیم و یا از صد رد بشه.
sum_help: محاسبه مجموع بر اساس سکه های 5 ریالی و 2 ریالی است.
sum: محاسبه مجموع بر اساس هر سه نوع سکه (5، 2 و 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);
برخی خروجی ها هم نمایش میدم:
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
سلام
@milad عزیز
میدونستم به نکته ساده توجه نکردم ولی نه در این حد خخخ فقط یه مشکلی هست اونم اینه که باید از تمامی سکه ها استفاده بشه و نمیتونیم 100 سکه 1 ریالی رو فقط استفاده کردپس باید سکه ها رو هم بررسی کنیم که حداقل بزرگتر از 0 باشند
ممنون مشکلم رو حل کردید :)
کد رو هم اینجا قرار میدم شاید به درد یکی خورد :)
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 و @rezayki
خواهش می کنم، سلامت باشید
در صورت مسئله ابتدایی اشاره نکرده بودید که باید حداقل از هرکدوم یکی باشه؛ ولی نیاز به تغییر خاصی هم نداره. کافیه هر سه حلقه رو به جای صفر، از یک شروع کرد. اینجوری حداقل عدد یک رو در بر می گیرند.
(تغییرات ریزی که لازمه رو انجام دادم و جواب ها تصحیح شدند)
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟