[ create a new paste ] login | about

Link: http://codepad.org/339T5xvx    [ raw code | output | fork | 8 comments ]

C, pasted on Sep 11:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
#include<conio.h>
/*
Bài tập này thực chất là giải hệ pt:
x * 1000 + y * 2000 + z * 5000 = 200.000
200 * 1000 = 200000 => x thuộc [0, 200]
100 * 2000 = 200000 => y thuộc [0, 100]
40 * 5000 = 200000 => z thuộc [0, 40]
*/
int main()
{
	int i, j, k;
    for (i = 0; i <= 200; ++i)
        for (j = 0; j <= 100; ++j)
            for (k = 0; k <= 40; ++k)
                if (i * 1000 + j * 2000 + k * 5000 == 200000)
                    printf("\n%d to 1000(VND) -  %d to 2000(VND) - %d to 5000(VND) ", i, j, k);
   
	getch();
	return 0;
}


Output:
1
Line 17: error: conio.h: No such file or directory


Create a new paste based on this one


Comments:
posted by Letuan97 on Mar 19
Có chút giải thuật thì dễ hiểu hơn ý tưởng
reply
posted by khangmau on Jan 2
bài này 200 là có 40 lần số 5 ,rút gọn lại được 39 sô 5 và 4 cách là 1+1+1+1+1;1+2+2;1+1+1+1+1;5 đều bằng 5
cứ thế rút gọn suy kết quả bằng 4^39;

reply
posted by trung_nd on Aug 2
khangmau sai rồi, bạn chưa loại bỏ những kết quả trùng lặp, ví vụ [39 lần 5, 1 lần (2+2+1)] với [38 lần 5, 1 lần (2+2+1), 1 lần 5]. Mình cũng đang suy nghĩ cách giải bài này bằng tổ hợp theo hướng giống bạn nhưng chưa tìm đc cách giải.
reply
posted by trung_nd on Aug 2
giải theo hướng tổ hợp có vẻ bất khả thi vì trường hợp trùng lặp quá nhiều, ví dụ 2x[2+1+1+1] sẽ có số lần xuất hiện của 2 và 1 bằng với [2+2+1]+[1+1+1+1+1].
reply
posted by phuquy12 on Apr 1
Theo mình hiểu đề bài cần xác định tổng số trường hợp có CẢ 3 LOẠI tiền. Cách vd trên ta có thể thấy những TH thiếu 1-2 loại tiền. Mình xin đóng góp cách của mình
reply
posted by phuquy12 on Apr 1
#include <stdio.h>
/*
Cần có tổng 200000 đồng từ 3 loại giấy bạc
1000 đồng, 2000 đồng, 5000 đồng.
Lập chương trình để tìm ra tất cả các phương án có thể

*/
int main()
{
/* a,b,c are the number of 5k,2k,1k respectively */
int a, b, c, c_c;
int count = 0;
int total; // total = 200
for (a = 1; a < 40; ++a)
{

for (c = 1; c <= (198 - 5 * a);)
{
for (b = (200 - 5 * a - c) / 2; b >= 1; --b)
{
total = a * 5 + b * 2 + c;
if (total == 200)
{
count++;break;
}
}
if (a % 2 == 1)
c += 2;
else
++c;
}
}
printf("Co %d truong hop", count);

}
reply
posted by luongphongnhan on Oct 23
#include<iostream>
using namespace std;
int main() {
int sum1, sum2, sum3;
int count = 0;
for (int i = 1; i <= 39; i++)
{
sum1 = 50000*i;
for (int j = 1; j <= 97; j++)
{
sum2 = 20000*j;
for (int k = 1; k < 193; k++)
{
sum3 = 10000*k;
if (sum1 + sum2 + sum3 == 200000) {
count++;
}
}
}
}

cout << "Co tong so cach la: " << count << endl;
system("pause");
return 0;
}
reply
posted by luongphongnhan on Oct 23
5000i + 20000j + 10000k = 200000;
<=> 5i + 2j + k = 200;
i,j,k >=1;
=> i <=39;
j <= 97;
k <=193;
reply