Nhờ check xem code đúng không và có cách giải nào hay hơn không

đề: viết chương trình nhập 1 số nguyên trong khoảng từ (0-99) .Sau đó lần lượt lấy ngẫu nhiên các số trong khoảng này cho đến khi có một giá trị đúng bằng giá trị nhập vào.in ra kết quả từng bước và tổng số bước phải thức hiện.

package BaiTap;

import java.util.Scanner;

public class test {
public static void main(String[] args) {
	Scanner sc= new Scanner(System.in);
	int n;
	System.out.println("nhap vao so nguyen duong n tu 10-99:");
	n=sc.nextInt(); 
	double x= Math.random();
	x= Math.random()* 100;
	int sum=0;
	
	if( x==n) {
		System.out.println("tong so buoc la:"+ 1);
	}else {
		do { sum+= x;
			System.out.println("tong so buoc la:"+ sum);}
		while (x==n);
		}
		
	}
	
		
	}

ủa, bạn không chạy thử cái bạn đã viết ra hay sao?
bạn có đọc hiểu đề không?

là in gì? yes/no/đúng/sai/right/wrong/…
nếu là in số ngẫu nhiên thì phải nói rõ, chứ kết quả ở đây khá mơ hồ

có vẻ như chưa có làm cái này?
code cua bạn trông có vẻ như chưa đạt nên cũng chưa cần nghĩ tới chuyện tối ưu đâu

3 Likes

Mình ko biết tạo vòng lặp mà cho bước nhảy ranrom kiểu gì? Mình mới tập code đc một tuần …mong bạn chỉ giúp

thay vì đổi lỗi cho bản thân mới học (như vậy thì phải học thêm nữa chứ) thì bạn nên tập trung vào việc mô tả các bước thực hiện bằng lời. đại khái như

1. nhập số nguyên
2. Lần lượt
    2.1 sinh ra số ngẫu nhiên (chắc là nguyên) theo yêu cầu đề bài
    2.2 ghi nhận số lần sinh ra số ngẫu nhiên
    2.2 in ra số ngẫu nhiên vửa sinh ra
    2.3 nếu bằng thì kết luận. nếu không bằng thì lại trờ về bước 2.1

sau đó đi vào chi tiết hơn

1. nhập thì hiển nhiên là có **khai báo và lệnh nhập** 
2. Lần lượt => cái này dung while hay for hay do/while các kiểu đều được, cứ chọn đại, mà thực tế thì đúng là cách nào cũng được, miễn dừng là được
    2.1 sinh ra số ngẫu nhiên (chắc là nguyên) theo yêu cầu đề bài => search google như hình (chắc là không khó lắm đâu nhỉ, chưa gõ hết nó đã ra gợi ý)
    2.2 ghi nhận số lần sinh ra số ngẫu nhiên => vậy là cần một biến để đếm số lần, vậy trước bước 2 này cần có bước chuẩn bị, khai báo biến đếm và gán nó là 0
    2.2 in ra số ngẫu nhiên vửa sinh ra => đề nói là gen thì phải in ra, thì in thôi
    2.3 
        nếu bằng thì kết luận. nếu không bằng thì lại trờ về bước 2.1 => if đúng điều kiện rồi thì thì dừng => đề dừng thì phải làm sao cho điều kiện dừng nó đúng => khai báo biến done = false rồi dùng while (!done) để lặp, khi số mới sinh ra đúng rồi thì gán nó lại thành true thì nó dừng, hoặc đơn giản là dùng lệnh break......
       nếu chưa đúng thì thôi, lại lặp tiếp (là không làm thêm gì cả) tiếp lục lặp nữa

nhìn từ đầu tới cuối, với những bài tập kiểu nảy, chỉ cần mô tả các bước bằng lời là xong ngay, chẳng có gì đụng chạm tới giải thuật gì cả

3 Likes

Math.random() xong mới có số để kiểm tra => do...while.

2 Likes

cam on cac ban! minh hieu roi

package BaiTap;

import java.util.Scanner;

public class test {
public static void main(String[] args) {
	Scanner sc= new Scanner(System.in);
	int n;
	System.out.println("nhap vao so nguyen duong n tu 10-99:");
	n= sc.nextInt();
	int sum=0;
	double x; 
	for (int i=0;; i++) {
		x=Math.random()* 100;
		System.out.println((int)x);
		sum=i+1;
	if ((int)x==n) {break;}
		
	}
	System.out.println("tong so buoc la:"+ sum);
	
	}

	
		
	}

@Lubu190691: Nếu viết tiếng Việ thì có dấu đầy đủ nhé.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?