Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 3 123 CuốiCuối
Kết quả 1 đến 10 của 23
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    tìm số nguyên p,q sao cho p/q
    Mã:
    #include <iostream>#include <iomanip>using namespace std;int main(){    float x;    int max,p=1,q=1,p1,q1;    cout<<"Nhap x: ";    cin>>x;    cout<<"Nhap gioi han max: ";    cin>>max;    for(int q=1;q<=max;q++)    {        while(float(p/q)<x)        {            p++;        }        p--;        p1=p,q1=q;    }    cout<<p1<<setw(2)<<q1<<endl;    system("pause");    return 0;}
    đây là code của mình nhưng nếu x là số lẻ thì lại chạy không đúng.
    vd x = 5.0, Max =7 => p = 34, q =7
    nhưng nếu cho x = 5.5 thì chương trình lại cho kq sai. Bạn nào chỉ mình cách sửa với.


  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn xem chương trình này có đúng không
    Mã nguồn PHP:
    #include<iostream.h>void main(){float x,max,p1,q1,p=9,q=9,temp; cout<<"x=";cin>>x; cout<<"max=";cin>>max; for(q1=1;q1<=max;q1++) {p1=(int)(q1*x); if(p1/q1==x){p1--;} if(p1/q1>temp){p=p1;q=q1;temp=p1/q1;} } cout<<"p="<<p<<" q="<<q; }  

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Với đề trên thì tại sao lại phải nhập max vào. Người dùng đâu cần xét max.
    Phát biểu lại bài toán rõ ràng như sau:
    Input : Cho một số nguyên x.
    Output : p,q sao cho :
    + p=max{n|n>x}
    + q=max{m|m<x}
    + abs(p/q)<abs(x) (Áp dụng cho cả số âm vì nó là số nguyên cơ mà [IMG]images/smilies/18.gif[/IMG])

    Từ đó khi xác định cặp số (p,q) rồi có thể xác định cặp số bất kỳ (p,q) bằng việc nhân nó với một hằng số k.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Tadius
    Với đề trên thì tại sao lại phải nhập max vào. Người dùng đâu cần xét max.
    Phát biểu lại bài toán rõ ràng như sau:
    Input : Cho một số nguyên x.
    Output : p,q sao cho :
    + p=max{n|n>x}
    + q=max{m|m<x}
    + abs(p/q)<abs(x) (Áp dụng cho cả số âm vì nó là số nguyên cơ mà [IMG]images/smilies/18.gif[/IMG])

    Từ đó khi xác định cặp số (p,q) rồi có thể xác định cặp số bất kỳ (p,q) bằng việc nhân nó với một hằng số k.
    Theo mình cần max chứ .giả sử x=1
    nếu không có max thì ko tìm được p,q do phân sô n/(n+1) tăng khi n tăng và n/(n+1)<1 với mọi n
    Ngoài ra thấy đề bài bảo là p/q<x vậy nếu p/q <0 và x <0;p/q<x=>abs(p/q)>abs(x) chứ

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    1.Không cần max vẫn làm được đấy.
    Xuất phát q=p=x

    Mã:
     do {   p++;   q--;  //   ...cái gì đó đó các bạn tự viết vô }while (điều kiện dừng);
    2.Cái ta cần là độ sai khác giữa p/q với x là nhỏ nhất lên dùng trị tuyệt đối.
    Với số âm thì có phải là ngược lại không

    Nếu p/q kết quả nhỏ hơn 0
    x nhỏ hơn 0 thì
    p/q<x dấn đền abs(p/q)>abs(x).

    Bạn tự kiểm nghiệm lại trên cái trục số sau.
    -3 -2 -1 0 1 2 3

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    lỗi "uninitialized local variable 'temp' used"
    mình cũng chưa hiểu ý bạn nên k sửa dc

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã nguồn PHP:
    #include<iostream.h>#include<math.h>void main(){float x,max,p1,q1,p,q,temp; cout<<"x=";cin>>x; cout<<"max=";cin>>max; temp=x-2; for(q1=1;q1<=max;q1++) {p1=floor((q1*x)); if(p1/q1==x){p1--;} if(p1/q1>temp){p=p1;q=q1;temp=p1/q1;} } cout<<"p="<<p<<" q="<<q; }  
    hihi quên gán giá trị khởi tạo cho temp thế mà thàng turbo c++ vẫn chạy ầm ầm
    Ỷ tưởng của mình là xét các sốq từ1->max
    p1=floor((q1*x))->p1 là số nguyên lớn nhất chia cho q1 có thương nhỏ hơn x .(p1 là phần nguyên của tích q1*x)
    sau đó minh so sánh các thương với nhau để tìm max

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    thanks bạn, chương trình chạy đúng rồi ^_^
    nhưng bạn có thể giúp mình sửa đoạn code bên trên theo cách của mình được không?

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Buồn ngủ rồi! Mai code bài này vậy mà không động tới max!

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Nhưng mình vẫn thấy 1/2<2/3<3/4<...<100/101<...
    Dãy này tăng và tiến đến 1 .Như vậy làm gì có p,q sao cho p/q<1 và gần 1 nhất
    giả sử bạn tìm được phân số p/q là phân số cần tìm thì phân sô (p+1)/(q+1) <1 và (p+1)/(q+1)>p/q
    Vậy (p+1)/(q+1) là phân số cần tìm =>vô lý
    Đề bài yêu cầu là "tìm số nguyên p,q sao cho p/q<x và gần x nhất" chứ có phải là "độ sai khác giữa p/q với x là nhỏ nhất" đâu

 

 
Trang 1 của 3 123 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •