View Full Version : bài toán trăm trâu
nh0cbilly
24-01-2009, 23:48
đề
Tram trau tram co
Trau dung an nam
Trau nam an ba
Trau gia an mot
Tức là 5X+3Y+Z=100. tìm X,Y,Z.
#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
int i,dung,nam,gia;
long int dem=0;
for(dung=1;dung<100;dung++)
{
for(nam=1;nam<100;nam++)
{
for(gia =1;gia<100;gia++)
if((dung*5+nam*3+gia)==100)
printf("\ntrau dung: %d; trau nam: %d; trau gia: %d",dung,nam,gia);
} dem++;
}
printf("\n co %d dap an",dem);
getch();
}
Cho em hỏi tại sao đáp án cứ ra là 99 dù em đếm ko đủ ?
trâu đứng ăn năm
trâu nằm ăn ba
lụ khụ trâu già
ba con ăn một bó
bải phải thêm điều kiện x+y+z=100 nữa chứ nhỉ
thuonghcm
25-01-2009, 05:00
minh nhjhi con câu : trau già 3 con một bó mà!/
chính là (z mod 3=0)
#include <stdio.h>
#include <conio.h>
main()
{
int dung,nam,gia;
int dem=0;
for(dung=1;dung<98;dung++)
{
for(nam=1;nam<99 - dung;nam++)
{
gia=100 - dung - nam;
if( ((dung*5+nam*3+gia/3)==100) && (gia % 3=0))
printf("\n trau dung:",dung,", trau nam:",nam,", trau gia:",gia);
} dem++;
}
printf("\n co",dem," dap an");
getch();
}
[=========> Bổ sung bài viết <=========]
minh nhjhi con câu : trau già 3 con một bó mà!/
chính là (z mod 3=0)
trong C có mod ư? mới thấy lần đầu.
nh0cbilly
25-01-2009, 21:52
bộ máy anh chưa làm bài toán này à :D
squall86
26-01-2009, 22:01
trong câu lệnh for
thì đứng, nằm, già nhận giá trị từ 0
Hok bik zì
26-01-2009, 23:01
#include <stdio.h>
#include <conio.h>
main()
{
int dung,nam,gia;
int dem=0;
for(dung=1;dung<98;dung++)
{
for(nam=1;nam<99 - dung;nam++)
{
gia=100 - dung - nam;
if( ((dung*5+nam*3+gia/3)==100) && (gia % 3=0))
printf("\n trau dung:",dung,", trau nam:",nam,", trau gia:",gia);
} dem++;
}
printf("\n co",dem," dap an");
getch();
}
[=========> Bổ sung bài viết <=========]
trong C có mod ư? mới thấy lần đầu.
#define mod % lol
trong câu lệnh for
thì đứng, nằm, già nhận giá trị từ 0
từ 1, thậm chí già là từ 3, vì có ít nhất 1 con
đề
Tram trau tram co
Trau dung an nam
Trau nam an ba
Trau gia an mot
Tức là 5X+3Y+Z=100. tìm X,Y,Z.
#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
int i,dung,nam,gia;
long int dem=0;
for(dung=1;dung<100;dung++)
{
for(nam=1;nam<100;nam++)
{
for(gia =1;gia<100;gia++)
if((dung*5+nam*3+gia)==100)
printf("\ntrau dung: %d; trau nam: %d; trau gia: %d",dung,nam,gia);
} dem++;
}
printf("\n co %d dap an",dem);
getch();
}
Cho em hỏi tại sao đáp án cứ ra là 99 dù em đếm ko đủ ?
NGhe bài này rồi giờ đọc sao mà thấy ko hiểu lắm
Phương trình thế này phải không nhỉ
5X + 3Y + Z = 100
X + Y + Z = 100
trừ 2 phương trình cho nhau tự nhiên được 4X + 2Y = 0;
Thế này vì X với Y là không thể âm => X = Y = 0; => Z = 100
vậy còn gì để giải nữa nhỉ ?.
bạn ơi bài này đâu phải như vậy
nếu là bài toán trăm trâu thì là thế này mà
Trăm trâu ăn trăm bó cỏ
Trâu đứng ăn 5
Trâu nằm ăn 3
Lụ khụ trâu già
Ba con 1 bó mà
++++++++++++++++++++++++++++++++++
bài giải như sau
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main(void)
{
int d,n,g;
int dem;
dem=0;
printf("Bai toan tram trau\n");
printf("Ngo HUng Cuong\n");
for(d=0;d<=20;++d)
{
for(n=0;n<=33;++n)
{
for(g=0;g<=99;g+=3)
if((d+n+g)==100&&(5*d+3*n+g/3)==100)
{
++dem;
printf("nghiem thu %i cua bai toan %i %i %i\n",dem,d,n,g);
}
}
}
printf("Press any key");
getch();
}
+++++++++++++++++++++++++++++++++++++++++++++
còn bài của bạn hình như sai thì phải
nếu trâu già ăn 1 thì chỉ có nghiệm duy nhất là 0 0 100 thôi
với lại bạn phải tăng biến đếm ở trong vòng lặp thứ 3 ở trong cả lệnh if
tức là chỉ khi là nghiệm thì mới đếm thôi chứ ở đây mỗi lượt của vòng for
for(dung=1;dung<100;dung++)
thì bạn lại tăng biến đếm lên 1 thì chẳng phải sẽ ra 99 nghiệm sao
thế này thì còn có chút ý nghĩa cho cuộc đời.
kethamtien8x
10-01-2010, 15:29
cac cau giai sai het roi`
co 3 dap so co ma a=4,b=18,c=78
a=8,b=11,c=81
a=12,b=4,c=84
ok men!
hoangnamquan
10-01-2010, 16:53
bài này phải là 3 trâu jà ăn một cơ
học từ lâu rùi mà
tronguyen
19-10-2010, 10:41
cac cau giai sai het roi`
co 3 dap so co ma a=4,b=18,c=78
a=8,b=11,c=81
a=12,b=4,c=84
ok men!
Đúng như thế! Vì các bạn kia quên đi điều kiện là "3 trâu già ăn 1" tức là số trâu già phải chia hết cho 3! Hay nói cách khác số cỏ cũng phải đúng 100 (không có lẻ)...
hoangnhan90
31-10-2010, 19:14
bài giải của tớ nè !!!
#include <stdio.h>
#include <conio.h>
void main()
{
int tdung, tnam, tgia, dem=0, i,j,k;
for(i=1,j=1,k=1;i*5<=100,j*3<=100,k/3<=100;i++,j++,k++);
for(tdung=1;tdung<=i;tdung++)
for(tnam=1;tnam<=j;tnam++)
for(tgia=1;tgia<+k;tgia++)
if( ((tdung*5)+(tnam*3)+(tgia/3))==100 && (tgia%3==0)
&& (tdung)+(tnam)+(tgia)==100)
{ printf("%d %d %d",tdung,tnam,tgia);
printf("\n");dem++;}
printf("tong cac phuong an: %d",dem);
getch();
}
kingnand
31-10-2010, 20:24
Nếu đề bài chủ topic đưa ra không nhầm (1 con trâu già ăn 1 bó) thì chỉ có 1 nghiệm 0 0 100 thôi.
Nếu theo đúng bài toán trăm trâu trăm cỏ thì code của chủ topic sai rùi.
Tại sao mọi người phải dùng 3 vòng lặp cho tăng thời gian tính toán nhỉ, chuyển 1 phương trình 2 ẩn và 1 phương trình 3 ẩn thì sẽ giảm đi rất nhiều chi phí thực hiện, cụ thể ta có 2 PT: 7x + 4y = 100 và z = 100 -x -y. Mình cho y: 0 to 14 và z: 0 to 25 => z và kiểm tra 3 <= z < 100.
Đây là ý tưởng giải thuật của mình, có gì sai mong được góp ý.
minh180688
31-10-2010, 22:09
đứng:X nằm:Y già:Z
X+Y+Z=100;
5X+3Y+Z/3=100;
chứ mấy ông lại tính là 5X+3Y+Z=100 thì đúng là vô đối
ambixilin
02-11-2010, 19:21
cau ou vi bo dem lay tu so 0 cho len 100 thi dem den 99 thoi
ca 0 nua la du ma
dau phai la tong dau
zero_teo
23-11-2010, 00:08
// tram trau tram co
trau dung an nam
trau nam an ba
lu khu trau gia
ba con mot bo
#include "stdio.h"
#include "conio.h"
void main ()
{
int tdung,tnam,tgia,phuongan= 0;
clrscr ();
for (tdung=1;tdung<=96;tdung++)
for (tnam=1;tnam<96;tnam++)
for (tgia=3;tgia<95;tgia++)
if (5*tdung + 3*tnam + tgia/3 == 100 && tgia%3==0 && tdung+tnam+tgia==100)
{
printf ("\ntrau dung %2d con, trau nam %2d con, trau gia %d con.\n",
tdung,tnam,tgia);
phuongan++;
}
printf ("co %d phuong an tim trau.",phuongan);
getch ();
}
criscooper
06-12-2010, 19:35
Vì trâu đứng ăn 5 cho nên tối đa sẽ là 20 con. => đứng <=20
tương tự với trâu già và trâu nằm
#include<stdio.h>
#include<conio.h>
main()
{
int dung,nam,gia;
for(dung=0;dung<=20;dung++)// Nếu không chấp nhận đáp án bằng 0 thì dung=1
for(nam=0;nam<40;nam++)//tương tự nằm =1
for(gia=0;gia<=100;gia++) //gia=1
if(dung+nam+gia==100 && dung*15+nam*9+gia==300)
{
printf("%d %d %d\n",dung,nam,gia);
}
getch();
}
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.