将数字转换为xy坐标

时间:2019-12-03 12:20:18

标签: algorithm math

我需要根据订单号生成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坐标。

公式上的任何指针

3 个答案:

答案 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) 2odd xdiv (x-2) 2even 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)]

这正是您想要的。

相关问题