Tìm giá trị lớn nhất/nhỏ nhất trong mảng

8
33070

Bài toán tìm giá trị lớn nhất/nhỏ nhất là một bài toán kinh điển trong việc học lập trình, nó khá đơn giản tuy nhiên có nhiều bạn vẫn chưa hiểu rõ, đặc biệt là các bạn mới tiếp cận với lập trình. Hôm nay oktot sẽ hướng dẫn các bạn chi tiết bài toán này.

Ví dụ: Ta có 2 số a và b, hay cho biết số nào lớn hơn ? kết quả này thì chắc ai cũng phải biết đúng không nào. Đó là đối với chúng ta, vậy máy tính thì sao ? cũng tương tự thôi, máy tính sẽ so sánh 2 con số này với nhau và trả về số lớn hơn.

Nếu (a>b)

            Max=a;

Ngược lại

            Max =b;

Code trong C/ C++ như sau

int max(int a, int b) 
{
   int max; 
   if (a > b)
      max = a;
   else
      max = b;
   return max; 
}

Nhập vào a=100, b=200;

Kết quả sẽ trả về max=200

Chương trình hoàn chỉnh

#include <stdio.h>
 
/* Khai báo hàm */
int max(int a, int b);
 
int main () 
{

   /* Khai báo biến */
   int a = 100;
   int b = 200;
   int max;
 
   /* Gọi hàm tìm giá trị max */
   max = max(a, b);
 
   printf( "Giá trị lớn nhất là : %d\n", max );
 
   return 0;
}
int max(int a, int b) 
{
   int max; 
   if (a > b)
      max = a;
   else
      max = b;
   return max; 
}

Kết quả sẽ trả về max=200

Thuật toán lấy giá trị lớn nhất trong mảng

max=a[0];

Duyệt với i=1..n-1

    Nếu (max<a[i])

            max=a[i];

Trả về max;

 Code trong C/C++

int LonNhat(int a[], int n) 
{
	// Thuật toán lấy giá trị lớn nhất
	int max = a[0];
	for(int i=1; i<n; i++)		
		if(a[i] > max)
			max = a[i];
	return max;
}

vd: mảng a có 5 phần tử giá trị tương ứng {3,7,1,9,2}

Max sẽ là: 9

Thuật toán lấy giá trị Nhỏ nhất trong mảng

min=a[0];

Duyệt với i=1..n-1

    Nếu (min>a[i])

            min=a[i];

Trả về min;

 Code trong C/C++

int NhoNhat(int a[], int n) 
{
	//Dùng kỹ thuật lính canh
	int min = a[0];
	for(int i=1; i<n; i++)		
		if(a[i] > min)
			min = a[i];
	return min;
}

vd: mảng a có 5 phần tử giá trị tương ứng {3,7,1,9,2}

Min sẽ là: 1

Chương trình không sử dụng hàm tìm giá trị lớn nhất/nhỏ nhất trong mảng

#include <conio.h>
#include <stdlib.h>

void main()
{
   int mang[20];

   int i, minval, maxval;

   /* Khoi tao mang ngau nhien */
   randomize();
   for (i=0; i<20; i++)
     mang[i] = random(100);

   /* Tim gia tri lon nhat va nho nhat */
   minval = maxval = mang[0];
   for (i=1; i<20; i++)
   {
     if (maxval < mang[i])
       maxval = mang[i];
     else if (minval > mang[i])
       minval = mang[i];
   }

   /* In mang */
   clrscr();
   for (i=0; i<20; i++)
   {
     if (mang[i] == maxval)
       textcolor(YELLOW);
     else if (mang[i] == minval)
       textcolor(RED);
     else
       textcolor(WHITE);
     cprintf("%3d", mang[i]);
   }

   getch();
}

Chúc các bạn thành công.

8 COMMENTS

  1. Mỗi game thủ khi chơi game sẽ có một bảng điểm lưu lại n thành tích đạt được
    gần đây nhất. Cho hai bảng điểm của hai game thủ, hãy viết chương trình cho phép xác định
    game thủ nào có điểm cao nhất. Biết rằng bảng điểm được lưu trữ trong mảng một chiều có kích thước là n.

  2. ad cho e hỏi e viết code này chạy được nhưng lại ra giá trị lớn nhất không đúng a tìm giúp e lỗi ở đâu
    int a[10],i,n;
    int _max;
    printf(“\n nhap n:”);scanf(“%d”,&n);
    for(i=0;i<n;i++)
    {
    printf("\n a[%d]=",i);
    scanf("%d",&a[i]);
    }
    _max=a[0];
    for(i=1;i_max)
    _max=a[i];
    printf(“\n giá trị lon nhat la:%d”,a[i]);
    return 0;

This site uses Akismet to reduce spam. Learn how your comment data is processed.