C#,雷卡曼数(Recamán Number)的算法与源代码

1 雷卡曼数(Recamán Number)

雷卡曼数(Recamán Number),即Recaman序列被定义如下:

(1) a0=0;

(2) 如果am-1-m>0并且这个值在序列中不存在,则am=am-1-m;

(3) 否则am=am-1+m;

雷卡曼序列的前几个数的数值是:0,1,3,6,2,7,13,20,12,21,11,22,10,23,9,,,,

2 源程序

using System;

using System.Collections;

using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm

{

public static partial class Number_Sequence

{

public static int Recaman_Number(int n)

{

int\[\] arr = new intn;

arr0 = 0;

for (int i = 1; i < n; i++)

{

int curr = arri - 1 - i;

for (int j = 0; j < i; j++)

{

if ((arrj == curr) || curr < 0)

{

curr = arri - 1 + i;

break;

}

}

arri = curr;

}

return arrn - 1;

}

public static int Recaman_Number_Second(int n)

{

if (n <= 0)

{

return 0;

}

HashSet<int> s = new HashSet<int>();

s.Add(0);

int prev = 0;

for (int i = 1; i < n; i++)

{

int curr = (prev - i);

if (curr < 0 || s.Contains(curr))

{

curr = (prev + i);

}

s.Add(curr);

prev = curr;

}

return prev;

}

}

}


POWER BY TRUFFER.CN 50018.COM

3 代码格式

cs 复制代码
using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Number_Sequence
    {
        public static int Recaman_Number(int n)
        {
            int[] arr = new int[n];
            arr[0] = 0;
            for (int i = 1; i < n; i++)
            {
                int curr = arr[i - 1] - i;
                for (int j = 0; j < i; j++)
                {
                    if ((arr[j] == curr) || curr < 0)
                    {
                        curr = arr[i - 1] + i;
                        break;
                    }
                }
                arr[i] = curr;
            }
            return arr[n - 1];
        }

        public static int Recaman_Number_Second(int n)
        {
            if (n <= 0)
            {
                return 0;
            }
            HashSet<int> s = new HashSet<int>();
            s.Add(0);

            int prev = 0;
            for (int i = 1; i < n; i++)
            {
                int curr = (prev - i);
                if (curr < 0 || s.Contains(curr))
                {
                    curr = (prev + i);
                }
                s.Add(curr);
                prev = curr;
            }
            return prev;
        }
    }
}
相关推荐
专注仿真8 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
罗西的思考9 小时前
【轻量化复刻大模型 / KIMI K3】AttnRes 模块交互式演示
人工智能·算法·机器学习
好悬给我拽开线12 小时前
ZILOT 论文解析
算法
饮水桶_T14 小时前
JAVA IO流笔记
开发语言·数据结构·算法
星夜离尘5614 小时前
MATLAB 离散数据分箱:半开区间、末端点与计数、加权和、平均
算法·matlab
Pniubi14 小时前
力扣76.最小覆盖子串
算法·leetcode·职场和发展
地平线开发者15 小时前
征程6|用 hrt\_model\_exec 看清 YOLOv5x 的输入、原始输出和后处理
人工智能·算法
csdn_aspnet16 小时前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法
赤生云电竞16 小时前
GPU算力共享平台架构实践:任务分发与资源隔离的关键配置
算法·架构·gpu算力
青少儿编程课堂18 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛