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ố 11 kết quả

Đề tài: Viết hàm kiểm tra một số có thỏa định lý pytago trên C++??

  1. #1
    Ngày gia nhập
    02 2009
    Bài viết
    3

    Mặc định Viết hàm kiểm tra một số có thỏa định lý pytago trên C++??

    Mình có một bài toán sau : cho một số nhập vào là n nguyên dương .
    Kiểm tra xem : n=a+b+c hay không ? và a,b,c phải thỏa : a*a=b*b+c*c .

  2. #2
    Ngày gia nhập
    03 2009
    Nơi ở
    Hà Nội
    Bài viết
    74

    bạn cho 2 vòng for để lấy giá trị a,b rồi xác định giá trị c theo nó.sau đó xét xem c>0 không và xét tiếp a*a=b*b+c*c

    http://ebook.here.vn
    trang web cung cấp đề thi,tài liệu ôn thi đại học.

  3. #3
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    Dùng 3 vòng lặp lồng nhau, chạy từ 1 đến n, nếu thoả mản đk, (nhớ kiểm tra xem nó có phải là tam giác không) thì lấy, Thế nhé. Bạn làm được chứ, mà a, b, c liệu có phải số nguyên không??

  4. #4
    Ngày gia nhập
    07 2007
    Nơi ở
    TP.HCM
    Bài viết
    199

    Trích dẫn Nguyên bản được gửi bởi trungkien45 Xem bài viết
    Dùng 3 vòng lặp lồng nhau, chạy từ 1 đến n, nếu thoả mản đk, (nhớ kiểm tra xem nó có phải là tam giác không) thì lấy, Thế nhé. Bạn làm được chứ, mà a, b, c liệu có phải số nguyên không??
    thoả điều kiện tức là tam giác rồi, cần gì kiểm tra là tam giác chi nữa )

  5. #5
    Ngày gia nhập
    02 2009
    Bài viết
    3

    Giá trị tất cả là mình xét nguyên thôi , mà nếu dùng 3 vòng for thì chạy hơi lâu đấy , mình muốn tối ưu code này mà chưa biết làm sao ?

  6. #6
    Ngày gia nhập
    03 2009
    Nơi ở
    Hà Nội
    Bài viết
    74

    Mặc định Viết hàm kiểm tra một số có thỏa định lý pytago trên C++??

    bạn có thể chỉ dùng 2 vòng for, cho a và b;
    a chạy từ n/3 đến n;
    b chạy từ 1 dến n/2;
    còn c thì bằng n-a-b;
    rồi xét a*a=b*b+c*c.
    như vậy là đã giảm khá nhiều bước rồi

    http://ebook.here.vn
    trang web cung cấp đề thi,tài liệu ôn thi đại học.

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

    * minhgiang , theo mình nghĩ , có lẽ chỉ có 1 bộ 3 số duy nhất thỏa Đk này , mình ko chắc lắm nhưng nếu vậy bài của bạn sẽ in ra 2 lần bộ số do có sự trùng số của a, b vì khoảng 1->n/2 giao với n/3 ->n
    *Đkha'nh : a,b,c thỏa đk mà ko phải là 3 cạnh 1 tam giác ? có hay ko?có lẽ lâu ko học mình mất căn bản về toán mất rồi , bạn giải thích lại giùm mình nhé.thanks
    Em có thấy nắng vàng kỷ niệm
    Hạ ngồi ru thanh thản những môi cười
    Thuở ngồi ngóng tay choàng tay nỗi nhớ
    Vin tay vào tháng năm chơi vơi...

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

    Có code đây nè bạn:
    PHP Code:
    http://forums.congdongcviet.com/showthread.php?t=6461 
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

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

    Trích dẫn Nguyên bản được gửi bởi cafelanh Xem bài viết
    * minhgiang , theo mình nghĩ , có lẽ chỉ có 1 bộ 3 số duy nhất thỏa Đk này , mình ko chắc lắm nhưng nếu vậy bài của bạn sẽ in ra 2 lần bộ số do có sự trùng số của a, b vì khoảng 1->n/2 giao với n/3 ->n
    *Đkha'nh : a,b,c thỏa đk mà ko phải là 3 cạnh 1 tam giác ? có hay ko?có lẽ lâu ko học mình mất căn bản về toán mất rồi , bạn giải thích lại giùm mình nhé.thanks
    Có rất nhiều bộ thoả điều này bạn ạ. Số 8400 là một ví dụ.
    Minh chứng đây:
    PHP Code:
    #include <stdio.h>
    #include<conio.h>
    #include<stdio.h>  
    #include<math.h>

    int ktraPitago(int );
    void    InPitago(int);
    int main()
    {
        
    int n;
        
    printf("Nhap n: \n");scanf("%d",&n);
        
    printf("Cac so Pitago nho hon %d va co tong bang chinh no: \n\n",n);
        
    int tongso=0;
        for(
    int i=12;i<=n;i++)
        {
            if(
    ktraPitago(i))
            {
                
    tongso+=1;
                
    InPitago(i);
                
    printf("\n");
                
            }
        }
        
    printf("\n\nCo tat ca %d so Pitago.",tongso);
        
    getch();
        return 
    0;
    }
    int ktraPitago(int n)
    {
        
    int flag=0;
        for(
    int i=2;i<n-1;i++)
        {
            
    int dem=0;
            for(
    int j=i+1;j+i<n;j++)
            {
                
    int z=n-i-j;
                    if(
    i*i+j*j==z*z)
                    {    
                        
    dem++;
                        
    flag++;
                    }
            }
        }
        return 
    flag;
    }
    void InPitago(int n)
    {
        
    int flag=0;
        for(
    int i=2;i<n-1;i++)
        {
            
    int dem=0;
            for(
    int j=i+1;j+i<n;j++)
            {
                
    int z=n-i-j;
                    if(
    i*i+j*j==z*z)
                    {    
                        
    printf("%d=",n);
                        
    printf("%d+%d+%d",i,j,z);
                        
    dem++;
                        
    flag++;
                    }
            }
            if(
    dem)
                
    printf("\n");    
        }

    Có một số điểm "củ chuối" trong code của mình: biến flag trong hàm ktraPitago được gán rất nhiều lần, trong khi chỉ cần 1 lần true là đủ; Độ phức tạp của thuật toán vẫn là O(n^2); Hàm InsoPitago và hàm ktrasoPitago gần giống nhau (thấy mình dở vì phải viết hai hàm giống nhau về thuật toán!). Ai có cách hay để giảm độ phức tạp của thuật toán xuống thì giúp mình với.
    Chủ thớt muốn kiểm tra xem n có là số nguyên tố không thì edit bài mình một tí là được (chỉ cần xoá vài lệnh trong code và viết vài dòng printf thông báo là được).
    Đã được chỉnh sửa lần cuối bởi Loveanygirls : 09-05-2009 lúc 05:05 PM.
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

  10. #10
    Ngày gia nhập
    03 2009
    Nơi ở
    Hà Nội
    Bài viết
    74

    bạn muốn không in 2 dãy 2 lần thì thêm điều kiện c>b tức n-a-b>b;

    Code:
    #include <stdio.h>;
    #include <conio.h>;
    int print_pitago(int n){
         int a,b,c,sl=0;
         for(a=n/3+1;a<n-1;a++){
         
                              for(b=1;b<n/2;b++){
                                                 if(n-a-b<b) break;
                                                 c=n-a-b;
                                                 if(a*a==b*b+c*c) {
                                                                  printf("%d %d %d\n",a,b,c);
                                                                  sl++;
                                                                  }
                                                 }
                              }
                              
         return sl;                     
         }
         
    int main(){
        int n;
        printf("nhap so n:");scanf("%d",&n);
        printf("co tat ca %d cap so\n",print_pitago(n));
        getch();
    }

    http://ebook.here.vn
    trang web cung cấp đề thi,tài liệu ôn thi đại học.

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

  1. Lập trình C++ lỗi khi viết trên dev c, còn trên cfree chạy bình thường
    Gửi bởi truongvantri trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 26-10-2013, 03:34 PM
  2. Cho em hỏi về số Pytago
    Gửi bởi hoailam9119 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 21-12-2012, 10:01 PM
  3. Bài tập C các phép tính trên phân số viết bằng C trên Linux. Mọi người sửa giúp mình với?
    Gửi bởi hxt57 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 2
    Bài viết cuối: 05-10-2011, 06:05 PM
  4. Algorithm Viết code thời khóa biểu viết trên Window Form C# như thế nào?
    Gửi bởi hocphp_1998 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 12-04-2011, 11:10 PM
  5. Viết code trên Form và viết code trong class có gì khác nhau.
    Gửi bởi hocCsharp trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 21
    Bài viết cuối: 21-01-2011, 10:37 PM

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