Fizzbuzz câu hỏi phỏng vấn javascript

Nếu bạn đã từng tham gia một cuộc phỏng vấn dành cho nhà phát triển, có lẽ bạn đã từng gặp phải sự cố fizz buzz tại một số thời điểm. Cho dù nó đang tạo giải pháp hay gỡ lỗi giải pháp sai của họ thì nó có thể đã xuất hiện trên màn hình của bạn ít nhất một lần. Nếu bạn chưa bắt đầu phỏng vấn thì đây là một vấn đề tuyệt vời để biết và hiểu giải pháp cho. Vì vậy, vấn đề là gì?

từ chối trách nhiệm. có NHIỀU cách để giải quyết vấn đề này, đây là cách tôi sẽ trả lời nó trong một cuộc phỏng vấn viết mã và sẽ chấp nhận như một câu trả lời thích hợp cho tất cả các nhà phát triển cấp độ

TLDR. Giải pháp ở dưới cùng ;p

Vấn đề

Viết chương trình lấy hai số và in ra các số đó. Nhưng đối với bội số của ba in "Fizz" thay vì số và đối với bội số của năm in "Buzz". Đối với các số là bội số của cả ba và năm, hãy in “FizzBuzz”

Fizzbuzz câu hỏi phỏng vấn javascript

Thí dụ

Sự phá vỡ

Câu trả lời cho bất kỳ câu hỏi phỏng vấn lập trình nào là khả năng chia nhỏ vấn đề. Để chia nhỏ các vấn đề, trước tiên hãy chia nhỏ các phần quan trọng khác nhau của giải pháp và viết nó theo cách có ý nghĩa với bạn hoặc gần với mã mà bạn biết mình sẽ cần viết. Vì vậy, hãy chia nhỏ chính xác những gì chúng ta biết chúng ta cần làm. Chúng ta cần phải

  • Chấp nhận 2 số - bắt đầu và kết thúc

  • Đối với các số bắt đầu kết thúc, chúng ta cần phải làm gì đó

  • Nếu số đó là bội số của 3, hãy ghi “Fizz” thay vì số

  • Nếu số đó là bội số của 5, hãy ghi “Buzz” thay vì số

  • Nếu số đó là bội số của 3 VÀ 5, hãy ghi “FizzBuzz” thay vì số

  • Nếu không ghi “Fizz”, “Buzz”, hoặc “FizzBuzz” ghi số

Lưu ý rằng tôi đã thay đổi một số từ ngữ để gần với mã hơn, chẳng hạn như sử dụng “log” thay vì “print" và định dạng nó theo kiểu câu lệnh for và if thay vì các câu thích hợp

bắt đầu viết mã

Bây giờ chúng ta đã có sự cố, hãy bắt đầu viết mã

Chúng ta biết rằng chúng ta cần tạo một hàm chấp nhận 2 tham số, một số bắt đầu và một số kết thúc

function fizzBuzz(start, end){
    //For numbers start to end we need to do something
    //If the number is a multiple of 3 log “Fizz” instead of the number
    //If the number is a multiple of 5 log “Buzz” instead of the number
    //If the number is a multiple of 3 AND 5 log “FizzBuzz” instead of the number
    //If not logging “Fizz”, “Buzz”, or “FizzBuzz” log the number
}

Lưu ý cách tôi thêm phần chia nhỏ dưới dạng nhận xét để tôi biết mình muốn làm gì trong chức năng của mình. cũng nhận thấy rằng tôi đã đặt tên cho chức năng của mình là “FizzBuzz” và đây là tên của sự cố, bạn có thể đặt tên khác cho nó nhưng tên phải có ý nghĩa dựa trên những gì bạn đang tạo giải pháp cho

Tiếp theo, chúng ta biết rằng đối với mỗi số từ 1-100 (nhưng cũng có thể là số nhiều hơn hoặc ít hơn), chúng ta cần in (hoặc ghi) một cái gì đó

function fizzBuzz(start, end){
    for(let num=start; num <= end; num++){
      //If the number is a multiple of 3 log “Fizz” instead of the number
      //If the number is a multiple of 5 log “Buzz” instead of the number
      //If the number is a multiple of 3 AND 5 log “FizzBuzz” instead of the number
      //If not logging “Fizz”, “Buzz”, or “FizzBuzz” log the number
    }
}

Bây giờ chúng ta có vòng lặp for cơ bản sẽ lặp từ số bắt đầu đến số kết thúc. Rất nhiều vòng lặp for sử dụng “let i=” thay vì “let num=” nhưng tôi thích tính dễ đọc hơn nhờ ít ký tự hơn và nhận thấy rằng việc đặt tên rất quan trọng trong thực tế nên tôi sử dụng nhiều tên mô tả hơn. Nếu vòng lặp for này không hợp lý với bạn, hãy kiểm tra trang vòng lặp JavaScript W3Schools này

Bây giờ chúng tôi biết rằng chúng tôi cần kiểm tra xem số hiện tại có phải là bội số của 3 hay không và nếu vậy, chúng tôi cần in (hoặc ghi) '“Fizz”. Đối với điều này, chúng tôi sẽ sử dụng mô đun. Nếu bạn không biết đó là gì, về cơ bản chúng ta sẽ kiểm tra xem số chúng ta đang chia cho 3 có dư không. Nếu không thì chia hết cho 3. Nếu bạn không biết thì có lẽ bạn nên xem trang số học JavaScript của W3Schools này

function fizzBuzz(start, end){
    for(let num=start; num <= end; num++){
        if(num % 3 === 0){
          console.log("Fizz")
        }
        //If the number is a multiple of 5 log “Buzz” instead of the number
        //If the number is a multiple of 3 AND 5 log “FizzBuzz” instead of the number
        //If not logging “Fizz”, “Buzz”, or “FizzBuzz” log the number
    }
}

Bây giờ chúng ta cần làm tương tự cho bội số của 5

function fizzBuzz(start, end){
    for(let num=start; num <= end; num++){
        if(num % 3 === 0){
          console.log("Fizz")
        }
        else if(num % 5 === 0){
          console.log("Buzz")
        }
        //If the number is a multiple of 3 AND 5 log “FizzBuzz” instead of the number
        //If not logging “Fizz”, “Buzz”, or “FizzBuzz” log the number
    }
}

Tôi hy vọng điều đó trông quen thuộc ;p… sau đó chúng ta sẽ kiểm tra bội số của 3 và 5

function fizzBuzz(start, end){
    for(let num=start; num <= end; num++){
        if(num % 3 === 0){
          console.log("Fizz")
        }
        else if(num % 5 === 0){
          console.log("Buzz")
        }
        else if(num % 5 === 0 && num % 3 === 0){
          console.log("FizzBuzz")
        }
        //If not logging “Fizz”, “Buzz”, or “FizzBuzz” log the number
    }
}

Điều đó cũng nên trông quen thuộc. Nếu && trông không quen thuộc, điều đó chỉ đánh giá rằng đối số đầu tiên (num % 5) và đối số thứ hai (num % 3) đều đúng. Nếu không biết điều đó trước khi đăng bài này, vui lòng xem trang W3Schools này về so sánh JavaScript

Cuối cùng nhưng không kém phần quan trọng nếu không có điều nào trong số đó là đúng, chúng tôi sẽ ghi lại số chúng tôi đang sử dụng

function fizzBuzz(start, end){
    for(let num=start; num <= end; num++){
        if(num % 3 === 0){
          console.log("Fizz")
        }
        else if(num % 5 === 0){
          console.log("Buzz")
        }
        else if(num % 5 === 0 && num % 3 === 0){
          console.log("FizzBuzz")
        } 
        else {
          console.log(num)
        }
    }
}

Bây giờ chúng tôi chạy nó… (nếu bạn không biết cách nhanh nhất là nhấp chuột phải vào trình duyệt của mình, nhấp vào kiểm tra, ở đầu cửa sổ bật ra, hãy nhấp vào bảng điều khiển, sao chép mã của bạn và dán mã đó . sau đó chạy thử nghiệm cũ. fizzBuzz(3, 15) )

chờ đã….

NHƯNG RACHAEL KHÔNG HOẠT ĐỘNG

bây giờ bạn sẽ thấy khi nào nó phải đăng nhập “FizzBuzz” thì việc ghi “Fizz” của nó. mất một giây. Nhìn vào mã và xem nếu bạn có thể thấy tại sao

Tôi hy vọng bạn tìm thấy nó nhưng nếu không thì cũng không sao. đó là bởi vì chúng tôi đang kiểm tra xem nó có chia hết cho 5 và 3 hay không sau khi chúng tôi kiểm tra cái này hay cái kia trước. Vòng lặp sẽ dừng ở câu lệnh đầu tiên có giá trị đúng và ghi nhật ký đó. Trong trường hợp này nếu nó chia hết cho 3 VÀ 5 thì nó cũng chỉ chia hết cho 3 nên nó dừng ở if đầu tiên và bảng điều khiển ghi “Fizz”. Vì vậy, làm thế nào để chúng tôi sửa chữa nó?

Giải pháp cuối cùng

Tất cả những gì chúng ta phải làm là di chuyển dấu chia hết cho 3 và 5 lên trên cùng và bạn sẽ có câu trả lời cuối cùng. chúc mừng