类等差数列--求一个数列中某一位置的值

本文介绍了如何运用等差数列的性质解决一个特定的算法问题。在面对一个看似无规律的数列时,通过观察发现其为等差数列的一部分,从而利用等差数列的求和公式进行计算。文章提供了完整代码实现,并强调了在解决问题时,思维与代码结合的重要性。
摘要由CSDN通过智能技术生成

题目:

在这里插入图片描述在这里插入图片描述

题解:

对于这个题,我们其实刚看到全都么有思路。但是细心的人就可能会发现其中是有规律的。我在测试的时候,使用暴力的解法只能通过六个点,所以这个题还是要我们来进行寻找规律。
因为这个序列每一部分都是由1到n组成。所以当啷个相邻的n与n+1的位数相同的时候,每一个1到n的序列其实是等差数列。因此我们就可以使用等差序列来进行求和的计算,计算总共数列的长度。
既然我们将其看作等差数列,那么我们就要先寻找要找的位置在哪一项中。
也就是k的位置大于前n项的长度,小于前n+1项的长度的时候,他就在1-n+
1这一项中。
找到属于第几项,我们通过该项的位置减去前面的长度,就是这个位置,在这一项里面的位置。
找到一项里面的位置,我们就通过每位数级的项数找到他的位置,之后从一个数中使用他的位置找到这个数。

完整代码:

#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include <algorithm> 
#include <cstring>
#include <cmath>
#include <map>
#include<queue>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

long long len1(long long x)  //反回x第一次出现 时,前面的总长度 
{
   
	long long d=0;      //位数;
	long long n=0;      //在每一位数上有多少项 1~9有9项;10~99有9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值