设计函数f(f(n))== -n
来源:厦门SEO
我上次面试时遇到的一个问题:
设计一个函数
f,使得:f(f(n)) == -n其中
n是一个32位有符号整数 ; 您不能使用复数算法。如果您不能为整个数字范围设计这样的函数,请为最大范围设计它。
有任何想法吗?
#1楼
x86 asm(AT&T风格):
; input %edi
; output %eax
; clobbered regs: %ecx, %edx
f:
    testl   %edi, %edi
    je  .zero
    movl    %edi, %eax
    movl    $1, %ecx
    movl    %edi, %edx
    andl    $1, %eax
    addl    %eax, %eax
    subl    %eax, %ecx
    xorl    %eax, %eax
    testl   %edi, %edi
    setg    %al
    shrl    $31, %edx
    subl    %edx, %eax
    imull   %ecx, %eax
    subl    %eax, %edi
    movl    %edi, %eax
    imull   %ecx, %eax
.zero:
    xorl    %eax, %eax
    ret
检查代码,传递所有可能的32位整数,错误-2147483647(下溢)。
#2楼
该Perl解决方案适用于整数,浮点数和字符串 。
sub f {
    my $n = shift;
    return ref($n) ? -$$n : \$n;
}
尝试一些测试数据。
print $_, ' ', f(f($_)), "\n" for -2, 0, 1, 1.1, -3.3, 'foo' '-bar';
输出:
-2 2
0 0
1 -1
1.1 -1.1
-3.3 3.3
foo -foo
-bar +bar
#3楼
没有人说过f(x)必须是同一类型。
def f(x):
    if type(x) == list:
        return -x[0]
    return [x]
f(2) => [2]
f(f(2)) => -2
#4楼
这是受要求启发的解决方案,或声称不能使用复数来解决此问题。
乘以-1的平方根是一个想法,这似乎只是失败了,因为-1在整数上没有平方根。 但是,使用诸如mathematica之类的程序可以得出以下等式
(1849436465 2 +1)mod(2 32 -3)= 0。
这几乎与平方根为-1一样好。 该函数的结果必须是一个有符号整数。 因此,我将使用修改后的模运算mods(x,n),它返回与最接近0的x模n一致的整数y。只有极少数的编程语言具有suc模运算,但是很容易定义。 例如在python中,它是:
def mods(x, n):
    y = x % n
    if y > n/2: y-= n
    return y
使用上面的方程,现在可以解决问题
def f(x):
    return mods(x*1849436465, 2**32-3)
对于[-2 31 -2, 2 31 -2]范围内的所有整数,满足f(f(x)) = -x 。 f(x)结果也在此范围内,但是计算当然需要64位整数。
#5楼
利用JavaScript异常。
function f(n) {
    try {
        return n();
    }
    catch(e) {
        return function() { return -n; };
    }
}
f(f(0)) => 0
f(f(1)) => -1
设计函数f(f(n))== -n的更多相关文章
- <转载>网页设计中的F式布局
		地址:http://www.uisdc.com/understanding-the-f-layout-in-web-design 网页设计中的F式布局 今天我们来重点介绍网页设计中的F式布局.传统的布 ... 
- ORM之自关联、add、set方法、聚合函数、F、Q查询和事务
		一.外键自关联(一对多) 1.建表 # 评论表 class Comment(models.Model): id = models.AutoField(primary_key=True) content ... 
- 2、函数y=f(x)
		/* Note:Your choice is C IDE */ #include "stdio.h" /* 3.函数y=f(x)可表示为: */ void main() { int ... 
- 前序遍历 排序 二叉搜索树  递归函数的数学定义 return  递归函数不能定义为内联函数  f(x0)由f(f(x0))决定
		遍历二叉树 traversing binary tree 线索二叉树 threaded binary tree 线索链表 线索化 1. 二叉树3个基本单元组成:根节点.左子树.右子树 以L.D.R ... 
- C++:一般情况下,设计函数的形参只需要两种形式
		C++:一般情况下,设计函数的形参只需要两种形式.一,是引用形参,例如 void function (int &p_para):二,是常量引用形参,例如 void function(const ... 
- 请教下 f = f.replace('\n', '\r')这条没起作用
		!/usr/bin/env python -- coding: utf-8 -- import json import string import sys reload(sys) sys.setdef ... 
- python中F/f表达式优于format()表达式
		F/f表达式可以解析任意类型的数据 具体实现,看下面示例: 1.解析变量 1 a = 10 3 b = 20 5 res1 = F"a+b的值:{a+b}" 7 print(res ... 
- F - F HDU - 1173(二维化一维-思维)
		F - F HDU - 1173 一个邮递员每次只能从邮局拿走一封信送信.在一个二维的直角坐标系中,邮递员只能朝四个方向移动,正北.正东.正南.正西. 有n个需要收信的地址,现在需要你帮助找到一个地方 ... 
- 聚合函数与F/Q表达式
		聚合函数 取名: field + __ + 聚合函数名字 ,如:price__avg:可传关键字参数修改名字:avg=Avg("price"): aggregate:不会返回一个 ... 
随机推荐
- 如何拖拽DIV边线并左右自适应改变大小?
			//树图拉伸 jQuery(function ($){ var doc = $(document), dl = $(".side-tree" ... 
- DAO三层架构及工厂模式
			目录结构 1.在domain包中创建User实体类 package com.rick.domain; import java.util.Date; public class User { privat ... 
- 51nod 1284:2 3 5 7的倍数 容斥原理
			1284 2 3 5 7的倍数 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 例如N ... 
- Rancher安装 - CentOS7(Docker)环境
			Rancher安装 - CentOS7(Docker)环境 对于开发和测试环境,我们建议通过运行单个Docker容器来安装Rancher.在此安装场景中,您将在单个Linux主机上安装Docker,然 ... 
- Java 14 令人期待的 5 大新特性,打包工具终于要来了
			随着新的 Java 发布生命周期的到来,新版本预计将于 2020 年 3 月发布,本文将对其中的 5 个主要特性作些概述. Java 13刚刚发布给开发人员使用不久,最新版本的JDK于2019年9月发 ... 
- [极客大挑战 2019]Secret File
			0x00知识点 没有过滤file 使用php的file伪协议去读取文件 ?file=php://filter/convert.base64-encode/resource=flag.php 0x01解 ... 
- TX2Ubuntu16.04远程登录
			1.在PC机与TX2都要同步时钟: sudo apt-get install chrony sudo ntpdate ntp.ubuntu.com 如果ntpdate有错误检查是否安装ntpdate ... 
- Django2.0——中间件
			Django中间件middleware本质是一个类,在请求到返回的中间,类中不同的方法会在指定的时机中被触发.setting.py的变量MIDDLEWARE_CLASSES中的每一个元素都是中间件,且 ... 
- 使用cropper插件裁剪并上传图片(Spring mvc)
			cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. cropper有两种方式上传截 ... 
- Java面向对象(概述,构造函数,类与对象的关系,this关键字,成员、局部),匿名对象的调用,构造代码块(5)
			Java面向对象(概述,构造函数,类与对象的关系,this关键字,成员.局部),匿名对象的帝爱用,构造代码块(5) 
