一些有意思的js编程题

Q : 有个可怜的家伙,由于某些原因无法使用js中的原型方法Array.prototype.sort,于是他写下了如下的代码,希望奇迹会发生:

const miracleSort = arr =>
{
    var result = [...arr]
    var sorted = false
    do
    {
        sorted = true
        for (var i = 1;i < result.length;++i)
            if (result[i] < result[i - 1])
            {
                sorted = false
                break
            }
    }
    while (!sorted)
    return result
}

作为js 大神,请帮助这个可怜的家伙
要求 :调用方法miracleSort输入正整数数组,输出排序后的数组 ,例如 :
miracleSort([4,2,6,8,5]) //输出[2 ,4 ,5,6 ,8]

A :

const arrayIterator = Array.prototype[Symbol.iterator]
const miracleIterator = function() {
  let arr = this.slice()
  let swapped
  do {
    swapped = false
    for (let i = 0; i < arr.length - 1; ++i) {
      if (arr[i] > arr[i + 1]) {
        [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]]
        swapped = true
      }
    }
  } while (swapped)
  return arrayIterator.call(arr)
}
Array.prototype[Symbol.iterator] = miracleIterator

本题的突破口在与...运算符会调用Iterator接口,解决办法就是重写Array的Symbol.iterator方法。因此第三行var result = [...arr]得到的就是排过序的数组。


Q : 如何在不使用Array.prototype.reverse方法的条件下翻转数组,并且代码字节数不超过30?
A : reserve=a=>a.map(a.pop,[...a])
因为函数名是固定的,所以实际上可用的字节就22个。想了很久,试过用a.sort(_=>1) 但是数组长度超过12的话sort会使用快速排序。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些C语言初学者可能会觉得有趣的编程题: 1. 猜数字游戏:编写一个程序,让用户猜一个范围内的随机生成的整数,直到猜中为止。程序应根据用户的猜测给出提示,告诉用户是猜大了还是猜小了。 2. 九九乘法表:编写一个程序打印出九九乘法表,即从1乘1到9乘9的所有结果。 3. 排序算法:实现常见的排序算法,如冒泡排序、选择排序或插入排序,并通过程序验证其正确性。 4. 计算器:编写一个简单的计算器程序,可以接受两个操作数和一个运算符,然后根据运算符执行相应的数学运算并输出结果。 5. 石头剪刀布游戏:编写一个石头剪刀布游戏的程序,让用户选择石头、剪刀或布,并与计算机进行对战,判断输赢并输出结果。 6. 简易登录系统:编写一个简单的登录系统,要求用户输入用户名和密码,并进行验证,如果匹配则输出登录成功,否则输出登录失败。 7. 生成斐波那契数列:编写一个程序,使用循环或递归方式生成斐波那契数列的前n项,并输出结果。 8. 统计字符个数:编写一个程序,接受一个字符串和一个字符,统计该字符在字符串中出现的次数,并输出结果。 9. 找出最大值和最小值:编写一个程序,接受一组整数输入,并找出其中的最大值和最小值,并输出结果。 10. 简易图书管理系统:编写一个简易的图书管理系统,包括图书的增加、删除、查询等功能,并可以将图书信息存储在文件中。 以上这些编程题可以帮助初学者巩固基本的编程知识和技能,并提高对C语言的理解和应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值