algorithm - 国际象棋-算法,指定跳跃

标签 algorithm combinatorics

我有一个问题。

我们有无限的棋盘,如何计算 n 次跳跃后你可能发现自己跳跃的一半的数量?

例如:

一次跳跃后我们有8个盒子

两次跳跃后我们有33个盒子

#include<bits/stdc++.h>
using namespace std;

int sign(int n)
{
  if(n > 0 )return 1;
  else if(n == 0) return 0;
  else return -1;
}


int main()
{
  int t, n;
  cin >> t;
  for(int i = 0; i < t; i++)
  {
    cin >> n;
    cout << 7*n*n + 4*n - 3*sign(n-2)*sign(n-1) << endl;

  }
}


//f(n) = 7*n^2 + 4*n - 3*Sign[(n - 2)(n - 1)]

怎么了?

我的代码返回 11,对于 n = 1,应该返回 8

好的,工作!

最佳答案

通过编写一个简单的 python 程序:

dx = [-2, -2, -1, -1, 1, 1, 2, 2]
dy = [-1, 1, -2, 2, -2, 2, -1, 1]

def calc(level):
    cell_list = set([(0,0)])
    for _ in range(level):
        new_cell_list = set()
        for x, y in cell_list:
            for k in range(len(dx)):
                new_cell_list.add((x+dx[k], y+dy[k]))
        cell_list = new_cell_list

    return len(cell_list)


for level in range(1, 10):
    print(calc(level), end=', ')

我们得到

8, 33, 76, 129, 196, 277, 372, 481, 604

这是A118312 .公式为:

f(n) = 7*n^2 + 4*n - 3 + 4*Sign[(n - 2)(n - 1)]

在哪里

           1   n > 0
Sign(n) =  0   n == 0
          -1   n < 0

这等同于:

f(0) = 1
f(1) = 8
f(2) = 33
f(n) = 7*n^2 + 4*n + 1, n >= 3

关于algorithm - 国际象棋-算法,指定跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33057278/

相关文章:

java - 寻找滑动窗口中的最大值

algorithm - 计算独特的四边形

时间:2019-03-08 标签:c++combinatorics

c++ - 根据位置计算组合

algorithm - 在排序数组中搜索比二进制搜索复杂度低

c++ - 插入比较 #'s 似乎太大了

algorithm - 在图形中查找路径通过最少三个节点并以起始节点结束的最小距离?

c++ - 如何找到给定范围内的整数个数甚至设置位

algorithm - 生成所有可能的 split

algorithm - 查找具有非冲突类别的项目子集