Java - Tìm số nguyên m lớn nhất sao cho 1 + 2 + 3 + ... + m < n (n nhập từ bàn phím).

Viết chương trình nhập vào số nguyên n từ bàn phím. Tìm và in ra màn hình số nguyên m lớn nhất sao cho 1 + 2 + 3 + ... + m < n.

Yêu cầu: Chương trình phải kiểm tra và yêu cầu người dùng nhập vào n >= 0.

Bài giải

-------------------- ######## --------------------

Bài giải.
package vong_lap_do_while;

import java.util.Scanner;

public class TimSo {

	public static void main(String[] args) {
		int m = 0, n, sum = 0;
		Scanner scanner = new Scanner(System.in);
		
		/*
		 * Nhập vào số nguyên n 
		 * và kiểm tra nếu n < 0 đúng thì quay lại thực hiện câu lệnh bên trong do
		 * ngược lại thoát ra khỏi vòng lặp.
		 */
		do {
			System.out.println("Nhập vào số nguyên n: ");
			n = scanner.nextInt();
		} while (n < 0);
		
		// tìm số m
		while ((sum + m) < n) {
			sum += ++m;	// tăng m lên 1 đơn vị và tính sum = sum + m
			System.out.print(m);	// System.out.print(): hiển thị trên cùng 1 dòng
			if ((sum + m) < n) {
				System.out.print(" + ");
			}
		}
		
		if (sum > 0) {
			System.out.println(" = " + sum + " <= " + n);
		}
		
		System.out.println("m lớn nhất = " + m);
	}

}
Kết quả sau khi biên dịch chương trình:

Giải thích hoạt động của chương trình trên:

Bước 1: Nhập vào số nguyên và kiểm tra nếu số vừa nhập nhỏ hơn 0 thì nhập lại. Vì tôi nhập vào số 5 > 0 nên điều kiện trong do - while sai nên sẽ thoát khỏi vòng lặp.

Bước 2: Thực hiện vòng lặp while. Lúc này sum = 0m = 0sum + m = 0 < 5 (đúng) nên sẽ tăng m lên 1 đơn vị và sum = sum + m = 1.

Bước 3: Hiển thị m = 1 ra màn hình. Sau đó câu lệnh if ((sum + m) < n) sẽ được thực thi, vì sum + m = 1 + 1 =  2 < 5 (đúng) nên sẽ hiển thị dấu "+" ra màn hình.

Bước 4: Quay lại bước 2. Lúc này sum =  1m = 1sum + m = 2 < 5 (đúng) nên sẽ tăng m lên 1 đơn vị và sum = sum + m = 1 + 2 = 3.

Bước 5: Quay lại bước 3: Hiển thị m = 2 ra màn hình. Sau đó câu lệnh if ((sum + m) < n) sẽ được thực thi, vì sum + m = 3 + 2 =  5 < 5 (sai) nên sẽ không thực hiện câu lệnh bên trong if.

Bước 6: sum = 5 > 0 (đúng) nên câu lệnh System.out.println(" = " + sum + " <= " + n); sẽ được thực thi và kết quả là dòng 1 + 2 = 3 <= 5 sẽ được hiển thị ra màn hình.

Bước 7: Cuối cùng dòng lệnh System.out.println("m lớn nhất = " + m); được thực thi và sẽ hiển thị kết quả m lớn nhất = 2.

 

 

Nguồn: freetuts.net