Javascript 从1到100,打印“;平";如果是3的倍数,则为;“庞”;如果是5的倍数,则打印数字
我刚从一次工作面试回来,面试官让我写一个程序: 它应该,从1数到100,然后打印 如果是3的倍数,“ping”Javascript 从1到100,打印“;平";如果是3的倍数,则为;“庞”;如果是5的倍数,则打印数字,javascript,fizzbuzz,Javascript,Fizzbuzz,我刚从一次工作面试回来,面试官让我写一个程序: 它应该,从1数到100,然后打印 如果是3的倍数,“ping” 如果是5的倍数,“砰” 否则,请打印号码 如果是3和5的倍数(如15),则应打印“ping”和“pong” 我选择了Javascript,并得出以下结论: for (x=1; x <= 100; x++){ if( x % 3 == 0 ){ write("ping") } if( x % 5 == 0 ){ write("
如果是5的倍数,“砰”
否则,请打印号码 如果是3和5的倍数(如15),则应打印“ping”和“pong” 我选择了Javascript,并得出以下结论:
for (x=1; x <= 100; x++){
if( x % 3 == 0 ){
write("ping")
}
if( x % 5 == 0 ){
write("pong")
}
if( ( x % 3 != 0 ) && ( x % 5 != 0 ) ){
write(x)
}
}
对于(x=1;x您的解决方案非常令人满意。很难,因为一半的数字不是3或5的倍数,我从另一个角度开始:
for (var x=1; x <= 100; x++){
if( x % 3 && x % 5 ) {
document.write(x);
} else {
if( x % 3 == 0 ) {
document.write("ping");
}
if( x % 5 == 0 ) {
document.write("pong");
}
}
document.write('<br>'); //line breaks to enhance output readability
}
这是我的一句台词:
for(var x=1;x<101;x++)document.write((((x%3?'':'ping')+(x%5?'':'pong'))||x)+'<br>');
我写了一些变体(使用<代码> FIZZ和<代码> BuZ.)作为基准来考虑不同的迭代条件逻辑。< /P>
而
再次获胜:
// Iterate using a recursive function
// firing a callback once per iteration
function f(s,n) {
if(++n >= 102) return;
s === '' ? console.log(n-1) : console.log(s);
!!(n % 3)
? !!(n % 5)
? f('',n) : f('Buzz',n)
: !!(n % 5)
? f('Fizz',n) : f('FizzBuzz',n);
}
// Iterate using a `while` loop
// firing a callback after satisfying a condition
function b(n) {
var i = n;
$:
while(++i) {
if(i % 3)
if(i % 5)
console.log(i);
else
console.log('Buzz');
else if(i % 5)
console.log('Fizz');
else
console.log('FizzBuzz');
if(i >= 100)
break $;
}
return;
}
// Iterate using a `for` loop
// firing a callback once per iteration
function F(n) {
var i = n, f = 'Fizz', b = 'Buzz', o = '';
for (; i <= 100; i++) {
o = !(i % 3)
? !(i % 5)
? f + b : f
: !(i % 5)
? b : i;
console.log(o);
}
return;
}
// Iterate using a `for` loop
// firing a callback after satisfying a condition
function B(n) {
var i = n;
var fiz = 'Fizz';
var buz = 'Buzz';
for(; i <= 100; i++)
if(!(i % 3))
if(!(i % 5))
console.log(fiz + buz);
else
console.log(fiz);
else if(!(i % 5))
console.log(buz);
else
console.log(i);
return;
}
f('', 1); // recursive
b(0); // `while`
F(1); // `for`
B(1); // `for
//使用递归函数进行迭代
//每次迭代触发一次回调
函数f(s,n){
如果(++n>=102)返回;
s==''console.log(n-1):console.log(s);
!!(n%3)
?!!(n%5)
f('',n):f('Buzz',n)
:!!(n%5)
f('Fizz',n):f('FizzBuzz',n);
}
//使用'while'循环进行迭代
//在满足条件后触发回调
功能b(n){
var i=n;
$:
while(++i){
如果(i%3)
如果(i%5)
控制台日志(i);
其他的
console.log('Buzz');
否则如果(i%5)
console.log('Fizz');
其他的
console.log('FizzBuzz');
如果(i>=100)
打破美元;
}
返回;
}
//使用'for'循环进行迭代
//每次迭代触发一次回调
函数F(n){
变量i=n,f='Fizz',b='Buzz',o='';
对于(;i要消除最后一种情况,您可以使用继续:
for (x=1; x <= 100; x++){
if( x % 3 == 0 ){
write("ping")
continue
}
if( x % 5 == 0 ){
write("pong")
continue
}
write(x)
}
for(x=1;xfor(int number=1;number<100;number++)
{
布尔值shouldPrintNumber=true;
System.out.println(“\n”);
如果((数字%3)=0)
{
系统输出打印(“ping”);
shouldPrintNumber=false;
}
如果((数字%5)=0)
{
系统输出打印(“pong”);
shouldPrintNumber=false;
}
如果(应打印号码)
{
系统输出打印(编号);
}
}
对于var a=1;a这里有一个解决方案,它允许在不添加更多条件的情况下动态列出倍数
// List of outputs
var outputs = [
{mult: 3, str: 'ping'},
{mult: 5, str: 'pong'}
// {mult: 10, str: 'play'} ex: [30] => 'pingpongplay'
];
// Loop 100 times
for (var i = 1, j = 100; i <= j; i += 1) {
// Set empty vars
var result, string = '';
// Loop through the listed output objects
outputs.forEach(function (output) {
// If listed multiple, concat string
if (i % output.mult === 0) {
string += output.str;
}
});
// Set result
if (string.length) {
result = string;
} else {
result = i;
}
// print result
document.body.innerHTML += result + '<br>';
}
//输出列表
变量输出=[
{mult:3,str'ping'},
{mult:5,str:'pong'}
//{mult:10,str:'play'}ex:[30]=>'pingpongplay'
];
//循环100次
对于(var i=1,j=100;i{let i=1,o=(a,idx)=>{let r,s='';a.map(v=>{if(idx%v.mult==0)s+=v.str});s.length?r=s:r=idx;返回r};while(i
//创建一个for循环以从0计数到100
对于(让num=0;num我提出的最佳解决方案是:
用于(var i=1;i如果你不想检查它两次,请使用else If
。else If
在哪里?我试过了,但没有正确地工作这是经典的FizzBuzz编程问题,旨在剔除那些不会编程的程序员:不必不高兴,我认为你通过了。这项测试的目的不是为了优雅,而是为了et工作代码。与我的代码没有什么不同,但还是更好,正如我所要求的。谢谢,我已经从很多方面考虑过了,但所有简单的逻辑代码都需要两次检查。我只添加了一个else
微优化,正如我所说,你的代码在我看来是非常令人满意的。我将尝试在一行代码中重做它,但这是有问题的能让你得到责备。=]
@BernaMariano更新了答案,现在它不再两次进行相同的计算,但它需要一个变量。这是一行;):(var x=1,skip;x@shmiddy是的,
确实有助于阅读输出。我将其与主逻辑分开,因为问题没有要求打印新行。添加
使其更具可读性。=]
+1可能不是最实用的,但比所有和任何JS迷你程序都好。=/code>很好,b但我认为你永远不会想到站在一块板前,一支笔和5名高级开发人员在等待你的解决方案……更新:在不同浏览器上进行了更多测试后,第三种方法在每秒操作数方面开始与其他方法有所不同。最突出的区别是,它首先通过运行ll逻辑,然后触发一个回调。值得注意的是,我想看到的是一个使用反向循环的示例(例如,while(I--)
)在我看到这段代码之前,我不明白为什么每个人都对它这么生气operator@ganqqwerty哈哈,是的,我在2013年玩得太开心了……我已经摆脱了这种语法上的疯狂,然而,现在反应/功能风格很流行,它在前端XDC中卷土重来了ode块可能会回答这个问题,如果你能解释一下它为什么会这样做,那将是一个更好的答案。
for (x=1; x <= 100; x++){
if( x % 3 == 0 ){
write("ping")
continue
}
if( x % 5 == 0 ){
write("pong")
continue
}
write(x)
}
for( int number = 1 ; number < 100 ; number++ )
{
boolean shouldPrintNumber = true;
System.out.println("\n");
if( (number%3) == 0 )
{
System.out.print("ping");
shouldPrintNumber = false;
}
if( (number%5) == 0 )
{
System.out.print("pong");
shouldPrintNumber = false;
}
if( shouldPrintNumber )
{
System.out.print( number );
}
}
for var a = 1; a <= 100 ; a++
{
if a % 3 == 0 && a % 5 == 0
{
println("Fizzbuzz")
continue
}
if a % 5 == 0
{
println("Buzz")
continue
}
if a % 3 == 0
{
println("Fizz")
continue
}
else
{
println(a)
}
}
// List of outputs
var outputs = [
{mult: 3, str: 'ping'},
{mult: 5, str: 'pong'}
// {mult: 10, str: 'play'} ex: [30] => 'pingpongplay'
];
// Loop 100 times
for (var i = 1, j = 100; i <= j; i += 1) {
// Set empty vars
var result, string = '';
// Loop through the listed output objects
outputs.forEach(function (output) {
// If listed multiple, concat string
if (i % output.mult === 0) {
string += output.str;
}
});
// Set result
if (string.length) {
result = string;
} else {
result = i;
}
// print result
document.body.innerHTML += result + '<br>';
}
/*jslint browser: true */
var printOutputs = function (array, iterations) {
'use strict';
var i = 1;
var outputResults = function (arr, idx) {
var result;
var str = '';
arr.forEach(function (item) {
if (idx % item.mult === 0) {
str += item.str;
}
});
if (str.length) {
result = str;
} else {
result = idx;
}
return result;
};
while (i < iterations) {
document.body.innerHTML += outputResults(array, i) + '<br>';
i += 1;
}
};
var outputs = [
{mult: 3, str: 'ping'},
{mult: 5, str: 'pong'}
];
printOutputs(outputs, 100);
const pO=(arr,itr)=>{let i=1,o=(a,idx)=>{let r,s='';a.map(v=>{if(idx%v.mult===0)s+=v.str});s.length?r=s:r=idx;return r};while(i<itr){document.body.innerHTML+=`${o(arr,i)}<br>`;i++}};
pO([{mult:3,str:'ping'},{mult:5,str:'pong'}], 100);
for (var i = 1; i <= 100; i++) {
var message = '';
if (i%3 === 0) message += 'ping';
if (i%5 === 0) message += 'pong';
console.log(message || i);
}