【算法题】求第N位数字,数列如下112123123412345123456

【算法题】自增自然数列组,求第N位的数字,数列如下112123123412345123456

首先,鄙视下出这个题目的人,人为增加难度,无聊。这个题目如果之前没见过,想短时间写出来还是需要一定的脑力的,一步一步抽丝剥茧吧:

①先把该数列看成如下形式:

1

12

123

12345

123456

……

这样我们可以将每个子串单独分析,可以看出来第i个子串比第i-1个子串多一个数i,数i的长度为log10(i)+1,也就是是说第i个子串比第i-1个子串的长度长log10(i)+1。

这样就可以知道第N个数是在哪一个子串里面了。

#define maxn 10000
int num[maxn];

void init()
{
    num[0] = 0;
    num[1] = 1;
    for(int i = 2 ; i < maxn ; i ++)
    {
        num[i] = (num[i-1] + log10(i) + 1);
    }
}

②在字串里面求出该位置对应的数字

这个问题可以简化为自然数列12345678910111213……第n位是什么数字,这个就简单了:

//分析:
/**
第一步:找出给定的 n 落在几位数的范围内
自然数序列中各个数的数字分布:
1-9:       1*9
10-99:    2*90
100-999:  3*900
……
即,i * 9 * 10^i
所以,总位数sum=sum+i*9*tens;(其中,i++; tens *= 10; )
比较即可知道 n 落在几位数范围内。
例如给定n = 150,
首先一位有9个数字,所以位数可以+1,这样n-9 = 141. 然后2位的数字有2*90= 180,大于141,所以目标数字肯定是2位的。

第二步:找到具体落在哪个数字
用10+(141-1)/2 = 80

第三步:找出具体在哪一位上
用(141-1)%2=0,求出该数字(80)的第0位(即8)
*/

好吧,这个其实是Leetcode上面第400题。

最近有时间,会逐渐把leetcode题目整理出来:https://github.com/cancoo/leetcode

class Solution {
public:
    int findNthDigit(int n) {
        
        int i=1;
        long long tens=1;
        long long sum=0;
        while(sum<n)
        {
            sum+=i*9*tens;
            ++i;
            tens*=10;
        }
        --i;
        tens/=10;
        sum-=i*9*tens;
        
        //cal the gap with the lowest of this section
        long long diff=n-sum;
        long long resNum=tens+(diff-1)/i; //求出具体是哪个数字
        int resBit=(diff-1)%i;  //求出具体是这个数字的哪一位
        
        //to string and return the resNum's resBit position
        string s=to_string(resNum);
        return s[resBit]-'0';
    }
};

这里其实还是有些小坑的:首先是sum的类型,记得是long long,int太小了;然后是最后返回值,字符串记得要转换成数字(即减去'0')。

③接下来就简单了,①②组合下即可:

#include <iostream>
#include <string>
#include <stdio.h>
#include <math.h>
using namespace std;

#define maxn 10000

int num[maxn];

void init()
{
    num[0] = 0;
    num[1] = 1;
    for(int i = 2 ; i < maxn ; i ++)
    {
        num[i] = (num[i-1] + log10(i) + 1);
    }
}

int findNthDigit(int n) {

    int i=1;
    long long tens=1;
    long long sum=0;
    while(sum<n)
    {
        sum+=i*9*tens;
        ++i;
        tens*=10;
    }
    --i;
    tens/=10;
    sum-=i*9*tens;

    //gap with the lowest of this section
    long long diff=n-sum;
    long long resNum=tens+(diff-1)/i;
    int resBit=(diff-1)%i;
    //return resBit;
    //return resNum;

    //to string and return the resNum's resBit position
    string s=to_string(resNum);
    int result = s[resBit]-'0';
    cout<<result<<endl; // 这里会输出结果
    return result;
    //return s[resBit]-'0';
}

int main()
{
    init();
    int N=15, i=0, temp=-1;//这里的N就是需要求的第N位
    long long total=0;
    while(i<maxn)
    {
        i++;
        if(N-num[i]>num[i])
        {
             temp=N-num[i];
             break;
         }
        else
        {
             N-=num[i];
         }

     }
     if(temp<0)
         return -1; //error
     else
         findNthDigit(N);
}
有些小问题,极大数的边界问题,不改了。


内容概要:本文围绕基于CNN-Transformer混合模型的锂电池SOH(State of Health,健康状态)预测估计展开研究,提出一种融合卷积神经网络(CNN)与Transformer架构的深度学习方法,用于精准建模电池容量衰退过程。该方法充分发挥CNN在局部特征提取方面的优势以及Transformer在捕捉长时间序列依赖关系上的强大能力,有效提升了锂电池健康状态预测的准确性与稳定性。研究内容涵盖数据预处理、模型结构设计、训练优化流程及预测结果可视化等关键环节,适用于电池退化趋势分析与剩余使用寿命(RUL)评估,具有较强的工程应用价值。; 适合人群:具备Python编程能力和深度学习理论基础的高校研究生、科研人员及从事新能源电池管理系统开发的工程技术人才,特别适合聚焦于锂电池寿命预测、故障诊断与健康管理等方向的研究者。; 使用场景及目标:①掌握CNN与Transformer在时间序列回归任务中的协同建模机制;②实现高精度锂电池SOH预测模型构建与训练;③服务于电动汽车续航管理、储能系统运维决策与电池老化特性分析;④支持学术论文复现、科研项目验证及工业级电池管理算法开发。; 阅读建议:此资源以代码实践为核心驱动,建议读者结合所提供的完整Python代码进行动手实现,深入理解模型各模块的设计逻辑与训练技巧,并可通过调整网络结构或引入新数据集进一步拓展至其他时序预测任务中。
我们把同一标的(昆仑万维,现价 43.20 元,2026-07-31 收盘)交给三套系统,各出一份独立分析: **C 报告(CoordClaw 基于管理学多智能体系统)**——投研级。它由五个角色构成:周婷整合撰写、李静出基本面、王芳出技术面、赵明出风险、陈默做 PM 终审。最终产物是一份 38 项分级风险清单(P0×4 / P1×12 / P2×12 / P3×6 / 尾部×4)、双源交叉验证的财务数据(EM/Sina 差异 <0.01%)、严格的口径纪律,以及一份原样保留的"待核实"清单。结论冷冰冰:高风险,不建议参与。 **D 报告(DeepSeek)**——信息整理级。它把"4+3 AGI 战略"、天工 AI、Opera 浏览器、StarMaker 拆得很漂亮,核心财务数据(营收 81.98 亿、归母 -15.93 亿)也没算错。但整篇没有技术面、没有量化风控,更关键的是——它完全没提实控人已减持 75%、质押状态未知、净现金仅 15.19 亿且续航只有 1.26~1.81 年这些要命的负面。这是典型的"选择性呈现"。 **K 报告(Kimi)**——以对比评估的方式呈现。它搭起"数据准确性 / 分析维度 / 结论合理性"的三维框架,把几份材料放在一起对照,给出各自的强弱判定。它的维度意识比 D 报告更自觉,但作为一份独立分析,它对"评估方法本身的信度"交待不足,部分引用的核对也不够彻底。 结果两家的结论高度一致。C 报告(多智能体)被评投研级、居首;D 报告(DeepSeek 自己写的)被评信息整理级、居中;K 报告(Kimi 自己那份)维度较全但核验深度有限,排在两者之间。DeepSeek 的那份评估把 C 给了五星、D 三星、K 四星;Kimi 的那份评估也独立地把最高分给了 C。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值