Thứ Bảy, 13 tháng 7, 2019

Bài 3 - Giải thuật nhập môn

Hè đến rồi, Nam được bố dẫn đi chơi công viên. Trong công viên có nhiều gian hàng trò chơi, trong đó Nam thích nhất là gian trò chơi chọn số. Người ta viết sẵn một số dãy số số nguyên dương không được sắp xếp (dãy này có N phần tử, các phần tử có giá trị khác nhau đôi một, N≤10000, các số của dãy có giá trị từ 1 đến 30000), sau đó họ đưa ra 1 số M (M≤N) và yêu cầu người chơi tìm số lớn thứ M trong dãy số này. Nam vốn tính toán nhanh lẹ, nhưng dứng trước câu đố này Nam cũng nói: “Phải nhờ lập trình ta mới biết nhanh được!”. Bạn hãy giúp Nam thực hiện công việc này.
Dữ liệu vào: từ file văn bản CHONSO.INP bao gồm:
- Dòng đầu tiên là số N và M
- N dòng tiếp theo, mỗi dòng môt số là giá trị của các số trong dãy số
Dữ liệu ra: file văn bản CHONSO.OUT, gồm 1 dòng chứa 2 số K, L trong đó K chỉ số thứ tự của số cần tìm trong dãy và L là giá trị của số cần tìm.
Ví dụ:
CHONSO.INP 
  
10  3
16
57
20
19
38
41
6
13
25
32   
CHONSO.OUT
5  38

9 nhận xét:

  1. Uses crt;
    Var n,m:longint;
    f,vt:array[1..100000] of longint;
    procedure nhap;
    Var fi:text;
    i,j,t:longint;
    Begin
    assign(fi,'CHONSO.INP');
    reset(fi);
    read(fi,n,m);
    For i:=1 to n do
    Begin
    readln(fi,f[i]);
    vt[i]:=i;
    end;
    For i:=1 to n-1 do
    For j:=i+1 to n do
    If f[j]>f[i] then
    Begin
    t:=f[i];
    f[i]:=f[j];
    f[j]:=t;
    t:=vt[i];
    vt[i]:=vt[j];
    vt[j]:=t;
    end;
    close(fi);
    end;
    procedure xuat;
    Var fo:text;
    Begin
    assign(fo,'CHONSO.OUT');
    rewrite(fo);
    Write(fo,vt[m]);
    Write(fo,' ');
    Write(fo,f[m]);
    close(fo);
    end;
    Begin
    nhap;
    xuat;
    end.

    Trả lờiXóa
  2. Code C++:
    #include

    using namespace std;

    struct T {
    int val, pos;
    } a[10006];

    int n, m;

    bool cmp(const T &b, const T &c) {
    return b.val>c.val;
    }

    int main() {
    freopen("CHONSO.inp", "r", stdin);
    freopen("CHONSO.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(int i=1; i<=n; i++) scanf("%d", &a[i].val), a[i].pos=i;
    sort(a+1, a+n+1, cmp);
    cout << a[m].pos << " " << a[m].val;
    return 0;
    }

    Trả lờiXóa
  3. Quách Đông Đônglúc 12:42 26 tháng 7, 2019

    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    int main(int argc, char** argv) {
    int n,m,a[10000],b[10000],g;
    ifstream cin;
    cin.open("D:/Dong/CHONSO.txt");
    cin>>n>>m;
    for (int i=0;i<n;i++){
    cin >>a[i];
    b[i]=a[i];
    }
    for (int i=0;i<n-1;i++){
    for (int j=i+1;j<n;j++){
    if (a[i]<a[j]){
    g=a[i];
    a[i]=a[j];
    a[j]=g;
    }
    }
    }
    for (int i=0;i<n;i++) if (b[i]==a[m-1]) g=i+1;
    ofstream cout;
    cout.open ("D:/Dong/CHONSOout.txt");
    cout <<"So can tim dung thu "<<g<<" trong day va co gia tri la "<<a[m-1];
    cin.close();
    cout.close();
    return 0;
    }

    Trả lờiXóa
  4. Nhận xét này đã bị tác giả xóa.

    Trả lờiXóa
  5. Nhận xét này đã bị tác giả xóa.

    Trả lờiXóa
  6. #include
    using namespace std;
    int main(int argc, char** argv) {
    int n,m,a[100];
    cin >>n; cin >>m;
    for (int i=0;i>a[i];

    for (int i=0;i<n-1;i++)
    for (int j=i+1;j<n;j++)
    {
    if (a[i]<a[j])
    {
    swap(a[i],a[j]);
    }
    }
    cout <<a[m-1];
    return 0;
    }

    Trả lờiXóa
  7. Nhận xét này đã bị tác giả xóa.

    Trả lờiXóa


  8. #include

    using namespace std;
    bool giamdan(pair a,pair b){
    return (a.first>b.first);
    }

    int main()
    {
    int n,m,t;
    freopen("CHONSO.INP","r",stdin);
    freopen("CHONSO.OUT","w",stdout);
    cin >> n >> m;
    vector> bai3;
    for (int i=0;i> t;
    bai3.push_back(make_pair(t,i+1));
    }
    sort(bai3.begin(),bai3.end(),giamdan);
    cout << bai3[m-1].second << " " << bai3[m-1].first;
    return 0;
    }
    //Cach su dung Vector Pair

    Trả lờiXóa
  9. #include

    using namespace std;
    int n,a[10000],b[10000];
    void heap(int i){
    int max;
    int l=2*i;
    int r=2*i+1;
    if ((i<=n) && (a[i]> n >> m;
    a[0] =-1;
    for (int i=1;i> a[i];
    b[i] = a[i];
    }
    while (m>0){
    a[1] =0;
    for (int i=n/2;i>0;i--){
    heap(i);
    }
    m -=1;
    }
    for (int i=1;i<n+1;i++){
    if (b[i]==a[1]){
    cout << i << " ";
    break;
    }
    }
    cout << a[1];
    return 0;
    }

    Trả lờiXóa

Dùng nick gmail để bình luận. Nếu lần đầu tiên bạn làm điều này thì hệ thống sẽ chuyển bạn sang trang blogger và hỏi bạn chọn tên hiển thị là gì. Bạn hãy nhập tên hiển thị rồi ok là được. Những lần bình luận sau hệ thống sẽ không hỏi nữa. Cảm ơn!

Bài được xem nhiều nhất