Bài 51. Tìm số lớn thứ 2 trong mảng

Bài số 49 trong 69 bài của series Học C Không Khó

Chúng ta đã cùng nhau đi làm bài tập tìm số lớn nhất trong mảng rồi. Hôm nay Lập trình không khó sẽ cùng các bạn đi giải 1 bài tập tư duy hơn một chút: tìm số lớn thứ 2 trong mảng. Hi vọng bài tập này sẽ giúp bạn ôn luyện được nhiều về các kiến thức đã học, đặc biệt là hàm và thao tác với mảng 1 chiều trong C.

Bài tập tìm số lớn thứ 2 trong mảng

/*
Tìm số lớn thứ 2 ở trong mảng
*/
Trong bài hướng dẫn này, mình sẽ tiếp cận theo 2 hướng khác nhau. Cụ thể:
  • C1. Sắp xếp mảng giảm dần => Số lớn thứ 2 là arr[1]
  • C2. Tìm đồng thời số lớn nhất và số lớn thứ 2

Bạn làm theo cách 1 sẽ dễ hiểu hơn, và nó cũng thuận với suy nghĩ của chúng ta hơn. Nhưng nếu làm cách 2 sẽ giúp thuật toán của chúng ta tối ưu hơn rất nhiều. Chúng ta sẽ đi qua từng cách nhé.

Chi tiết hướng dẫn từng cách có trong video hướng dẫn sau đây:

Code tìm số lớn thứ 2 trong mảng

Kết quả chạy chương trình:

Theo dõi lập trình không khó tại:

Các bài viết trong SeriesBài trước: Bài 50. Thuật toán tìm kiếm nhị phânBài sau: Bài 52. Thêm/ xóa phần tử trong mảng 1 chiều

6 COMMENTS

  1. em sắp xếp dãy theo chiều giảm dần rồi làm thế này là tìm đc số thứ 2:
    int lon_thu_2 ( int a[], int n ) {
    int i;
    for ( i = 1; i < n; i++ ) {
    if ( a[i] < a[0] ) return i; //nếu tìm đc giá trị nhỏ hơn nó trả về i luôn, thế
    } return 0; là a[i] sẽ là giá trị lơn thứ 2.
    } //nếu ko có giá trị nhỏ hơn thì trả về 0

    • em làm thế này ổn không a

      void gtMax(double *a, int n)
      {

      double firstMax,secondMax;
      int i=0;
      //Neu mang chi chua mot gia tri
      while(a[i]==a[i+1] && i<n-1)
      i++;
      if(i==n-1||n<2)
      cout << "mang khong co phan tu lon thu 2." <a[i+1])
      {
      firstMax=a[i];
      secondMax=a[i+1];
      }

      if(a[i]<a[i+1])
      {
      firstMax=a[i+1];
      secondMax=a[i];
      }

      for(i+2;i<n;i++)
      {
      // Day gia tri secondMax chua gia tri firstMax
      // Thay doi gia tri max lon hon firstMax cu

      if(firstMax<a[i])
      {
      secondMax=firstMax;
      firstMax=a[i];
      }
      //a[j] se nam giua firstMax va scondMax
      else if(secondMax<a[i] && a[i]<firstMax)
      secondMax=a[i];
      }
      cout << "\nGia tri max la: " << firstMax << endl;
      cout << "Gia tri lon thu 2 la: " << secondMax << endl;
      }
      }

LEAVE A REPLY

Please enter your comment!
Please enter your name here