Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

[help] Xin Giúp Đỡ Giải 1 Bài Toán Java Logic

Discussion in 'Trao đổi về thuật toán' started by jtsoy, 15/12/19.

  1. jtsoy

    jtsoy New Member

    Một cây nến cháy trong x giây sẽ tắt và để lại sáp còn dư, với lượng sáp còn dư từ một số cây nến cháy có thể tạo nên một cây nến hoàn chỉnh.
    Với n cây nến ban đầu ta có thể đốt từng cây một hoặc nhiều cây cùng lúc. Người ta muốn biết, để duy trì ánh sáng lâu nhất (đốt từng cây) và cường độ sáng lớn nhất có thể (đốt tất cả các cây có thể) thì sẽ hết thời gian bao lâu. Trả về hiệu số giữa thời gian duy trì độ sáng lâu nhất và thời gian duy trì cường độ sáng lớn nhất có thể, biết độ hao hụt khi đốt một cây nến là p , nghĩa là sau khi đốt, cây nến sẽ để lại lượng sáp sao cho với p cây nến sẽ tạo được một cây nền mới.
    Ví dụ:
    Với x=5,n=2, p=2 thì kết quả sẽ là numberOfLine(5,2,2) = 5.
    p= 2 nghĩa là sau khi đốt 2 cây nến cháy sẽ tạo ra được một cây nên mới.
    Thời gian đốt lâu nhất là 5 + 5 + 5 = 15, thời gian đốt để cường độ ánh sáng cao nhất có thể là 5 + 5 = 10
    Đầu vào/Đầu ra:
    [Thời gian] 0.5s với C++, 3s với Java và C#, 4s với Python, Go và JavaScript.
    [Đầu vào] integer n
    Số lượng cây nến ban đầu
    0 < n <= 10000.
    [Đầu vào] integer p
    Độ hao hụt của cây nến sau khi đốt
    1 < n <= 1000.
    [Đầu ra] int
    Hiệu giữa thời gian cháy để duy trì ánh sáng lâu nhất và thời gian để ánh sáng có cương độ cao nhất có thể.
    Mong mọi người giúp đỡ, em cám ơn ạ.
    Code của em:
    Code:
    //(Code này không pass hết tất cả các ví dụ => không đạt yêu cầu)
    int candlesBurning(int x, int n, int p){
    	int time;
    	if(n>=p){
    		time = (int) ((x*(n+(n/p))) - ((x*2)+x*((n/p)-Math.floor(n/p))));
    	}else{
    		time = (int) (x*(n+(n/p))) - (x+((n/p)*x));
    	}
    	return time;
    } 
     
  2. Joe

    Joe Thành viên VIP

    Your codes won't work properly. Reason: you misunderstand the working mechanism of java (or any OOPL with type-Strong). It works with PYTHON (because PYTHON is type-weak).

    What is Type-Strong and Type-Weak? Example
    - with PYTHON: you type 5/7 it will interprets 5 and 7 as 2 doubles and does the division and the result will be 0.7142857142857143
    - with JAVA or C#: you have to declare 5 and 7 as double. Otherwise it interprets them as 2 integers (as you've declared) and the division will be 0. If you want to have the correct result you have to cast the values: (double)5/7). The "(double)5" turns 5 to a double and the division will be a double, too.

    If you learn an OOPL such as JAVA, C# or C++ or PYTHON you have to learn the basic things such as type behavior, type conversion, casting, etc. If you don't do that your problems with coding will never end. So, back to your codes (I don't examine the correctness of your equation):
    PHP:
      int candlesBurning(int xint nint p){
        if(
    p) return (int) ((x*(n+((double)n/p))) - (x+(((double)n/p)*x)));
        return  (int) (((
    x*(n+((double)n/p))) - ((x*2)+x*(((double)n/p)-Math.floor((double)n/p)))));
      }
    The casting of the returned value will shred of the comma and makes the value to an integer. Example: 0.9 will be 0.
     

Chia sẻ trang này

Loading...