您应该编写一个程序或函数,该程序或函数将非负整数N
作为输入并输出或返回两个整数(负,零或正)X
和Y
。
整数在数学上是指整数,因为它们无限多。
实现的功能必须是双射的。这意味着对于每一个N
它必须输出一个不同的X
Y
对,并且X
Y
应该为每个输入输出每个对,N
即,对于某些输入,应该输出以下所有对N
:
...
┌─────┬─────┬────┬────┬────┐
│-2 -2│-2 -1│-2 0│-2 1│-2 2│
├─────┼─────┼────┼────┼────┤
│-1 -2│-1 -1│-1 0│-1 1│-1 2│
├─────┼─────┼────┼────┼────┤
... │0 -2 │0 -1 │0 0 │0 1 │0 2 │ ...
├─────┼─────┼────┼────┼────┤
│1 -2 │1 -1 │1 0 │1 1 │1 2 │
├─────┼─────┼────┼────┼────┤
│2 -2 │2 -1 │2 0 │2 1 │2 2 │
└─────┴─────┴────┴────┴────┘
...
请注意,如果U V
和,V U
则是不同的对U!=V
。
细节
- 如果您的语言不支持任意大的整数,那很好,但是您的算法应使用任意大的整数数据类型。您的代码仍至少应支持输入值
2^31-1
。 - 如果选择以字符串形式打印或返回输出,则不允许使用前导
0
或+
符号。否则,您的语言的标准整数表示形式就可以了。
例
如果任务是使一个双射函数采用非负整数N
并输出一个整数X
,则解决方案可能是该函数
if (input mod 2 == 0) return N/2 else return -(N+1)/2
,
以某种语言实现。该函数返回X = 0 -1 1 -2 2...
的N = 0 1 2 3 4...
。
10=>11 12, 9=>10 11
,这是无效的,因为重复了11吗?