Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 17 kết quả

Đề tài: tìm bộ 3 pitago

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    4

    Mặc định tìm bộ 3 pitago

    giúp mình bài này dzới: tìm a,b,c sao cho a^2+b^2=c^2 ; a<=b<=c<=n

  2. #2
    Ngày gia nhập
    03 2008
    Bài viết
    78

    - Bạn ko nêu đk a,b,c là số thực hay nguyên.
    - Thứ hai nếu là số nguyên thì bạn để ý nhé.
    + bạn bít bộ 3 Pytago thông dụng nhất hok (3,4,5)
    =>các bội số của bộ ba đó cũng chính là bộ ba pytago lun.Ví dụ (6,8,10) (9,12,15)...
    - Đến đây thì đơn jản rồi nhé.Bạn dùng while...do..tha hồ cho in ra theo bội số k.Chừng nào c > n thì thoát ra...bị vì c > b >a mà.
    - Còn số thực thì hình như là vô số bạn ơi. Khó lắm!!
    Chúc thành công...
    No way, No success..

  3. #3
    Ngày gia nhập
    03 2008
    Bài viết
    4

    Trích dẫn Nguyên bản được gửi bởi hacker_mubaohiem Xem bài viết
    - Bạn ko nêu đk a,b,c là số thực hay nguyên.
    - Thứ hai nếu là số nguyên thì bạn để ý nhé.
    + bạn bít bộ 3 Pytago thông dụng nhất hok (3,4,5)
    =>các bội số của bộ ba đó cũng chính là bộ ba pytago lun.Ví dụ (6,8,10) (9,12,15)...
    - Đến đây thì đơn jản rồi nhé.Bạn dùng while...do..tha hồ cho in ra theo bội số k.Chừng nào c > n thì thoát ra...bị vì c > b >a mà.
    - Còn số thực thì hình như là vô số bạn ơi. Khó lắm!!
    Chúc thành công...
    thx!!! ^^ wên nói a,b,c là số tự nhiên.nhưng mè làm theo cách của u tức là tìm theo bội số k thì trước tiên phải liệt kê ra trước những bộ 3 nhỏ nhất,sau đó mới áp dụng được.mà liệt kê ra thì ... ....
    có cách nào khác hem các pác?
    Đã được chỉnh sửa lần cuối bởi Vnt_vnboy : 15-03-2008 lúc 11:00 PM.

  4. #4
    Ngày gia nhập
    03 2007
    Bài viết
    179

    Code:
    for(int i=0;i<n;i++)
    {
    for(int j=0;j<n;j++){
    float z=sqrt(i*i+j*j)
    if((int)z==z)
    //la ok
    }
    }
    Đã được chỉnh sửa lần cuối bởi BuithiHa : 16-03-2008 lúc 03:53 PM. Lý do: chỉnh dấu phẩy thành dấu nhỏ

  5. #5
    Ngày gia nhập
    03 2008
    Bài viết
    78

    - Bạn nói a,b,c là số nguyên chứ jì.Vậy thì tui cam đoan với bạn ko có bô ba Pytago nào nhỏ hơn (3,4,5) cả.Cái này được thừa nhận về mặt Toán học, bạn thấy (3,4,5) ko nhỏ hay sao (số tự nhiên) mà đòi tìm nhỏ hơn nữa.

    - Sau khi bít bộ Pytago (3,4,5) rùi thì tui nói là bạn cứ in ra theo bội số k>1 thôi.Chứ dùng dòng lặp for để duyệt a*a+b*b==c*c thì phí quá bạn ơi.Mặc dù làm như bạn BuithiHa là có cải tiến rồi nhưng độ phức tạp thuật toán vẫn là O(n*n).

    - Đó là lý do tại sao ra đời nhiều thuật toán tốt, đều dựa vào cơ sở Toán học .Chứ duyệt toàn bộ là biện pháp cuối cùng.
    No way, No success..

  6. #6
    Ngày gia nhập
    03 2008
    Bài viết
    4

    Mặc định tìm bộ 3 pitago

    í mình nói là kòn những bộ 3 khác như 5,12,13 chẳng hạn.nếu cho n lớn thì có rất nhiều những bộ 3 như thế này
    Đã được chỉnh sửa lần cuối bởi Vnt_vnboy : 16-03-2008 lúc 02:11 PM.

  7. #7
    Ngày gia nhập
    01 2008
    Bài viết
    41

    tức là ý cậu là tìm hết tất cả các bộ 3 pitago??, cậu đưa ý tưởng về toán lên đi trc đã, về mặt toán việc tìm "tất cả" các bộ 3 pitago hình như đã là điều kô tưởng rồi

  8. #8
    Ngày gia nhập
    03 2008
    Bài viết
    78

    - Đúng là tôi đã có những ý kiến rất chủ quan về việc này.Thật ra, tui tạm gọi những bộ Pytago gốc là những bộ mà nó ko là bội của những bộ nào hết.

    - Ngoài (3,4,5) ra còn có một số bộ khác...tôi đã ngờ ngợ là có nhưng mà chủ quan wá.như là (5,12,13) vậy...

    tức là ý cậu là tìm hết tất cả các bộ 3 pitago??, cậu đưa ý tưởng về toán lên đi trc đã, về mặt toán việc tìm "tất cả" các bộ 3 pitago hình như đã là điều kô tưởng rồi
    - Đâu bạn theo mình nếu có sẵn giá trị n rồi thì có tưởng chứ...mình dựa vào định nghĩa mà làm thui a*a+b*b=c*c có điều phải duyệt toàn bộ thì quá ư là cùi b.. nhỉ.Nhưng ta có thể lợi dụng a<b<c nên hạn chế đc số lần lặp đó.Chẳng hạn bài của bạn BuithiHa có cải tiến là chỉ chạy 2 biến lặp thay vì 3 biến..nên tui còn có thể cải tiến thêm nữa nhé...Thôi thì ăn cắp bản quyền làm cho mới hơn...cái nói là của mình vậy...

    Code:
    for(int i=0;i,n;i++)
    {
    for(int j=i+1;j<n;j++){ //vi j>i
    float z=sqrt(i*i+j*j)
    if((int)z==z)
    //la ok
    }
    }
    No way, No success..

  9. #9
    Ngày gia nhập
    03 2008
    Bài viết
    4

    thx all!!! mình làm được òi ^^
    @ hacker_mubaohiem: mình thấy chỗ j=i+1 hình như ko đúng.mình làm như thía nài:
    Code:
    #include<stdio.h>  
    main()
    {
    	int n,i,j,z;
    	printf("\nn=");
    	scanf("%d",&n);
    	for(i=1;1<=n;i++)
    	{
    		for(j=1;j<=n;j++)
    		{
    			float z=sqrt(i*i+j*j);
    			if((int)z==z)
    			if((i<j)&&(j<z)&&(z<=n))
    			printf("%d %d %f\n",i,j,z);
    		}
    	}
    }

  10. #10
    Ngày gia nhập
    03 2008
    Bài viết
    78

    Code:
    for(int i=1;i,n;i++)
    {
    for(int j=i+1;j<n;j++){ //vi j>i
    float z=sqrt(i*i+j*j)
    if((int)z==z)
    //la ok
    }
    }
    - Đoạn CODE ở trên ko đúng là sai ở chỗ nào bạn có thể chỉ cho mình đc ko?Đáng lẽ một bài đơn giản thế này chúng ta phải làm cho ra lẽ...

    + Thứ nhất: phần j = i + 1 thì đề nói là i<j<z<n đúng hok.Chẳng nhẽ ta lại cho j chạy từ 1 àh.Hóa ra có những giá trị mà i>j (sai giả thiết) => phí số lần lặp.
    Mục đích tui cho j =i + 1 là để cho j luôn luôn lớn hơn i.

    + Nhưng đáng ra chỗ sai của tui thì bạn ko phát hiện ra nhỉ: ta nên thêm đều kiện là z<n trước khi in ra => rất sorry các bạn nhé.

    Thêm nữa hình như Code bạn mới đưa lên,bạn đặt điều kiện lặp trong For sai rồi.nên chương trình của bạn ko thoát ra được...Và ta ko nên dùng so sánh
    ((i<j)&&(j<z) vì là thừa...nếu như sử dụng ý tưởng của bạn BuithiHa( do tui chế lại tí xíu) thì chúng ta ko cần hai phép so sánh đó.Xem CODE nhé...

    Code:
    #include<stdio.h>  
    main()
    {
    	int n,i,j,z;
    	printf("\nn=");
    	scanf("%d",&n);
    	for(i=1;i<=n;i++) //Not 1<=n;
    	{
    		for(j=1;j<=n;j++)
    		{
    			float z=sqrt(i*i+j*j);
    			if((int)z==z)
    			if((i<j)&&(j<z)&&(z<=n)) //Not nessary if j = i + 1;
    			printf("%d %d %f\n",i,j,z);
    		}
    	}
    }
    - Tôi lun sẵn sàng tranh luận với bạn...mong bạn có ý kiến phản biện.Bài dễ nhưng làm cho hay lại là chuyện khác...Chúc bạn thành công!!!
    Đã được chỉnh sửa lần cuối bởi hacker_mubaohiem : 17-03-2008 lúc 12:57 PM.
    No way, No success..

Các đề tài tương tự

  1. Trả lời: 9
    Bài viết cuối: 05-05-2011, 04:55 PM
  2. Bài tập C | Liệt kê bộ số pitago
    Gửi bởi duydx trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 03-05-2009, 04:05 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn