我需要根据订单号生成belwo序列。
1-(0,0)
2-(1,0)
3-(0,1)
4-(1,1)
5-(0,2)
6-(1,2)
7-(0,3)
8-(1,3)
9-(0,4)
10-(1,4)
11-(0,5)
12-(1,5)
输入数字时,我需要xy坐标。
公式上的任何指针
答案 0 :(得分:1)
这是输入i
的以下公式:
(1 - (i % 2) ,(i // 2) - (1 - (i % 2)))
如果0
为奇数,则对的第一个元素为i
,如果1
为偶数,则对的第一个元素为i
。因此,它是1 - (i % 2)
。第二个元素是输入2
的整数除以第一个元素。因此它是(i // 2) - (1 - (i % 2))
答案 1 :(得分:0)
第一个数字为!(n & 1)
,第二个数字为floor((n - 1) / 2)
。作为C程序,它变为:
#include <stdio.h>
int calc1(int n)
{
return !(n & 1);
}
int calc2(int n)
{
return (int)((n - 1) / 2);
}
int main()
{
for(int n = 1 ; n <= 12 ; ++n)
printf("n=%d -> (%d, %d)\n", n, calc1(n), calc2(n));
return 0;
}
其输出为
n=1 -> (0, 0)
n=2 -> (1, 0)
n=3 -> (0, 1)
n=4 -> (1, 1)
n=5 -> (0, 2)
n=6 -> (1, 2)
n=7 -> (0, 3)
n=8 -> (1, 3)
n=9 -> (0, 4)
n=10 -> (1, 4)
n=11 -> (0, 5)
n=12 -> (1, 5)
答案 2 :(得分:0)
从样本数据中可以看到,如果输入数字(x)为偶数,则结果的第一个数字为1。如果输入数字为奇数,则为0。第二项是div (x-1) 2
,odd x
,div (x-2) 2
是even x
。
顺便说一下,在Haskell中,它看起来与上面的文字完全一样:
f :: Int -> (Int,Int)
f x
| odd x = (0, div (x-1) 2)
| even x = (1, div (x-2) 2)
将f应用于1..12中的每个数字
fmap f [1..12]
产量:
[(0,0),(1,0),(0,1),(1,1),(0,2),(1,2),(0,3),(1,3 ),(0,4),(1,4),(0,5),(1,5)]
这正是您想要的。