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
-------------------- ######## --------------------
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); } }
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 = 0
, m = 0
và sum + 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ài viết này được đăng tại [free tuts .net]
Bước 4: Quay lại bước 2. Lúc này sum = 1
, m = 1
và sum + 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
.
Câu hỏi thường gặp liên quan:
- 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).
- Java - Viết chương trình tính giai thừa của một số
- Java - Viết chương trình kiểm tra username và password.
- Java - Viết chương trình cho phép người dùng chọn đáp án đúng (câu hỏi 2)