Bài toán

Đề bài: Viết chương trình nhập vào ba số nguyên. Hãy in ba số này ra màn hình theo thứ tự tăng dần và chỉ dùng tối đa một biến phụ.

Hướng dẫn giải

Với bài toán này, rất nhiều bạn sẽ giải bằng cách sử dụng rất nhiều câu lệnh if else và thậm chí chả cần dùng thêm biến phụ. Nhưng bạn thử nhìn lại code của bạn mà xem, nó dài và rất là cồng kềnh. Bài viết này mình sẽ hướng dẫn các bạn giải quyết nó theo cách đơn giản nhất.

Đầu tiên chúng ta viết một hàm swap để hoán đổi giá trị của hai số, các bạn nhớ là phải dùng tham chiếu hoặc con trỏ nha. Ở đây mình dùng tham chiếu cho đơn giản.

void swap(int &a, int &b)
{
  int tmp = a;
  a = b;
  b = tmp;
}

Tiếp theo, chúng ta cần thiết lập một quy tắc để cho dễ xắp sếp, ở đây mình sẽ thiết lập quy tắc như sau: a >= b >= c và sau đó chúng ta chỉ in ra thứ tự c, b, a.

Điều này có nghĩa a sẽ là số lớn nhất và ta sẽ tìm ra số lớn nhất bằng hai câu lệnh sau:

if (a < b)
{
  swap(a, b);
}

if (a < c)
{
  swap(a, c);
}

Xong, ta đã tìm và gán giá trị lớn nhất cho a. Việc tiếp theo chỉ đơn giản là so sánh b và c mà thôi. Đơn giản phải không nào!

if (b < c)
{
  swap(b, c);
}

Yep, xong bài toán.

Code

Dưới đây là phần code tham khảo:

#include <stdio.h>

void swap(int &a, int &b)
{
  int tmp = a;
  a = b;
  b = tmp;
}

int main()
{
  int a, b, c;

  printf("Enter a: ");
  scanf("%d", &a);

  printf("Enter b: ");
  scanf("%d", &b);

  printf("Enter c: ");
  scanf("%d", &c);

  if (a < b)
  {
    swap(a, b);
  }

  if (a < c)
  {
    swap(a, c);
  }

  if (b < c)
  {
    swap(b, c);
  }

  printf("%d %d %d", c, b, a);
}