30/09/2018, 16:00

Thử kiến thức Javascript của bạn

Continuing the discussion from CodeFights - Become a Code Champion:

https://codefights.com/

Lên vọc thử thì thấy cái này, chắc là dễ với mấy bạn giỏi. Đạt thì bó tay rồi. Ai sửa dùm cái này lỗi chỗ nào vậy?

/**
 * @Input: a positive integer
 * @Output: sum of cubes of all integers
 * from 1 to and including @Input
 * @Example:
 * sumOfCubes(3) = 36
 */

function sumOfCubes(n) {
  var result = 1;
  for (var i=1; i <= n; i++){
  	result += i * i * i;
  }
  return result;
}
Đỗ Trung Quân viết 18:08 ngày 30/09/2018

var result = 1;

result = 0;
1 + 1^3 + 2^3 + 3^3 = 37.

Phạm Hoàng Tuấn viết 18:09 ngày 30/09/2018

E đoán thử, sửa var result = 1; thành var result = 0; hoặc sửa for (var i=1; i <= n; i++) thành for (var i=2; i <= n; i++)

Đỗ Trung Quân viết 18:12 ngày 30/09/2018

E đoán thử, sửa var result = 1; thành var result = 1; hoặc sửa for (var i=1; i <= n; i++) thành for (var i=2; i <= n; i++)

Không sửa được vòng for chạy từ i= 2 đâu bạn. Sửa result = 0 thôi

Phạm Hoàng Tuấn viết 18:02 ngày 30/09/2018

uhm, cám ơn bạn, nếu mình đoán k lầm thì sửa for i=2 chỉ đúng với tham số truyền vào n>=2; Truyền vào 0 là sai.

Đỗ Trung Quân viết 18:07 ngày 30/09/2018

Uhm, cộng thêm ban đầu đề bài người ta đã yêu cầu chạy từ i =1 cho nên không được sửa.

Đỗ Trung Quân viết 18:04 ngày 30/09/2018

Có câu này rất hay nhé =))

/**
 * @input: a positive integer
 * @Output: true is @Input is a power of two
 * and false otherwise
 * @Example:
 * isPowerOfTwo(2) = true
 * isPowerOfTwo(3) = false
 */

function isPowerOfTwo(n) {

  while (n % 2 === 0) { 
    n >>= 1;
  }

  if (n === 0) {
    return true;
  }

  return false;
}
Đỗ Trung Quân viết 18:02 ngày 30/09/2018

Anh @ltd giải thích em câu trên với. ^^

Phạm Hoàng Tuấn viết 18:02 ngày 30/09/2018

Bài này bạn đổi (Bỏ vô ide, debug thôi, chứ bt chưa chắc đã làm dc )

     if (n == 1) {
        return true;
      }

Toán tử >> là toán tử dịch bit dùng để thay đổi giá trị của các số được biểu diễn dưới dạng nhị phân. (Chi tiết chắc bạn lên google, mình k biết giải thích sao cho dễ hiểu).Ví dụ số n=16 đc biểu diễn là : 10000 (2^4). Số mũ bắt đầu từ vị trí số thứ tự thứ “0,1,2,3,4” nhá
Vậy n>>1 (Dịch sang phải 1 số. Cứ ngĩ là xóa 1 số cuối đi) = 1000=2^3=8
Vậy n>>2 (Dịch sang phải 2 số) = 100=2^2=4
Vậy n>>3 (Dịch sang phải 3 số) = 10=2^2=2
Vậy n>>4 (Dịch sang phải 4 số) = 1=2^0=1

Vì vậy nếu n là cơ số mũ của 2, thì giá trị cuối cùng fai luôn là 1.(2^0=1). Kết quả này do e debug rồi suy ra, nên không đưa ra đc lời giải đáp thỏa đáng, a @ltd có gì vào bổ sung e với nhé.

Đỗ Trung Quân viết 18:13 ngày 30/09/2018

if (n == 1) {
return true;
}

Đúng rồi, không hiểu nghĩ gì mà lúc test cứ nghĩ 2^0 = 0. Thế là chẳng hiểu nó sai chỗ nào :)))

Nguyễn Duy Khánh viết 18:06 ngày 30/09/2018

cái trang này hay nhưng hình như có mỗi javascipt à, java còn biết tí tí chứ cái này chịu

Đỗ Trung Quân viết 18:11 ngày 30/09/2018

cái trang này hay nhưng hình như có mỗi javascipt à, java còn biết tí tí chứ cái này chịu

Thuật toán thì ngôn ngữ nào cũng như nhau mà. Chỉ có phần string thì cái này hơi khác

Bài liên quan
0