Hiển thị kết quả từ 1 đến 6 / 6
  1. #1
    Tham gia
    09-09-2009
    Bài viết
    5
    Like
    0
    Thanked 0 Times in 0 Posts

    Lập trình C/ Bài điều kiện

    Các bạn hỗ trợ giúp mình bài C này với nhé

    Đề bài:
    Cho một mảng số nguyên phân biệt, tìm số lớn thứ nhất và số lơn thứ 2 trong mảng số nguyên đó.

    Phương pháp yêu cầu:
    Ví dụ: cho dãy số: 7 8 6 5 1 3 9
    so sánh 2 cặp một 8 6 3 9
    so sánh 2 tiếp 8 9
    So sánh tiếp 9
    ---> Số lớn nhất là: 9
    ---> Số lớn thứ 2 là: 8


    Các bạn giúp mình bài tập này với nhé.
    Cám ơn các bạn nhiều
    Rất mong nhận được sự hỗ trợ của các bạn
    Quote Quote

  2. #2
    Tham gia
    27-01-2009
    Location
    Lâm Thao - Phú Thọ
    Bài viết
    150
    Like
    0
    Thanked 4 Times in 4 Posts
    bài này giải thuật sai
    ví dụ dãy: 100 99 1 3
    chả nhẽ số lớn thứ 2 là 3

  3. #3
    Tham gia
    15-03-2010
    Bài viết
    1,562
    Like
    84
    Thanked 1,571 Times in 860 Posts
    Từ "cặp" theo yêu cầu của bài, theo tôi hiểu, là đặt ra một cặp số, lớn nhất (ln1) và lớn thứ hai (ln2). Và so sánh cặp số này với dãy số.

    Code:
    // giả sử đã có dãy số so[100] và n phần tử
    
    // đặt ra một số rất nhỏ để làm thuật so sánh
    #define SORATNHO -999999999
    
    // khởi đầu số lớn nhất, nhì bằng trị rất nhỏ
    // mục đích để khi so sánh, chúng sẽ chộp lấy trị đầu tiên
    // nhiều giải thuật bỏ qua phần này và khởi đầu chúng bằng trị đầu tiên của mảng
    // làm cách ấy trông gọn nhưng thực ra sẽ gặp khó khăn nếu mảng có nhiều số lớn nhất
    ln1 = SORATNHO;
    ln2 = ln1-1;
    
    for (int i=0; i < n; i++)
    {
       if (so[i] > ln1) // số mới lớn hơn cả hai số hiện tại
       {
          ln2 = ln1;
          ln1 = so[i];
       }
       else if (so[i] > ln2) // số mới chỉ lớn hơn số thứ hai
          ln2 = so[i];
    }
    
    if (ln1 <= SORATNHO)
       // mảng không có số lớn nhất (mảng trống)
    else if (ln2 <= SORATNHO)
       // mảng không có số lớn nhì (mảng chỉ có 1 trị)

  4. #4
    Tham gia
    09-09-2009
    Bài viết
    5
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi kidteam View Post
    bài này giải thuật sai
    ví dụ dãy: 100 99 1 3
    chả nhẽ số lớn thứ 2 là 3
    Đúng rồi bạn ah..
    Bạn có cách nào khắc phục vấn đề này không

  5. #5
    Tham gia
    27-01-2009
    Location
    Lâm Thao - Phú Thọ
    Bài viết
    150
    Like
    0
    Thanked 4 Times in 4 Posts
    theo mình nghĩ thì bạn sử dụng sắp xếp chọn
    và dừng lại ở lượt chọn thứ 2 thì 2 số đầu dãy là 2 số cần tìm
    Code:
    for(i=0;i<2;++i)
      {
        max=i;
        for(j=i+1;j<n;++j)
          if(a[j]>a[max])
            max=j;
        if(max!=i)
          {
            tg=a[i];
            a[i]=a[max];
            a[max]=tg;
          }
      }
    a[0] số lớn nhất
    a[1] số lớn thứ 2

  6. #6
    Tham gia
    02-05-2011
    Bài viết
    133
    Like
    0
    Thanked 67 Times in 49 Posts
    Quote Được gửi bởi megaownage View Post
    Từ "cặp" theo yêu cầu của bài, theo tôi hiểu, là đặt ra một cặp số, lớn nhất (ln1) và lớn thứ hai (ln2). Và so sánh cặp số này với dãy số.

    Code:
    // giả sử đã có dãy số so[100] và n phần tử
    
    // đặt ra một số rất nhỏ để làm thuật so sánh
    #define SORATNHO -999999999
    
    // khởi đầu số lớn nhất, nhì bằng trị rất nhỏ
    // mục đích để khi so sánh, chúng sẽ chộp lấy trị đầu tiên
    // nhiều giải thuật bỏ qua phần này và khởi đầu chúng bằng trị đầu tiên của mảng
    // làm cách ấy trông gọn nhưng thực ra sẽ gặp khó khăn nếu mảng có nhiều số lớn nhất
    ln1 = SORATNHO;
    ln2 = ln1-1;
    
    for (int i=0; i < n; i++)
    {
       if (so[i] > ln1) // số mới lớn hơn cả hai số hiện tại
       {
          ln2 = ln1;
          ln1 = so[i];
       }
       else if (so[i] > ln2) // số mới chỉ lớn hơn số thứ hai
          ln2 = so[i];
    }
    
    if (ln1 <= SORATNHO)
       // mảng không có số lớn nhất (mảng trống)
    else if (ln2 <= SORATNHO)
       // mảng không có số lớn nhì (mảng chỉ có 1 trị)
    SORATNHO nên định nghia là MIN_INT sẽ đảm bảo nhé. thêm #include <limits.h>

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • 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
  •