数组寻找循环节(HDUOJ 1005)

求解循环节长度解析及C++实现 求解循环节长度解析及C++实现 两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。 比如,11/13=6=>0.846153846153… 其循环节为[846153] 共有6位。 阅读详情

如题,一串无规律数组,可能从第n个数字开始以d为长度循环,试图找出这个d。

代码:

#include <cstdio>
#include <vector>

using namespace std;

#define MAXN 1000 //预测最大循环d的值

vector<int> num;

int main()
{
    int a,b,n;
    while(scanf("%d%d%d",&a,&b,&n)!=EOF)
    {
        if(a==0&&b==0&&n==0) break;

        num.clear();

        num.push_back(1);
        num.push_back(1);

        int first = 1; //递推公式f(n-1)
        int second = 1; //递推公式f(n-2)
        int f;         //递推公式f(n)
        int d = 1;     //迭代加深d
        int cnt = 1;    //vector下标
        int flagtrue= 0;  //元素相等计数
        int flagfalse = 0; //元素不等计数

        while(flagtrue < MAXN)
        {
            //递推公式计算f(n)
            f = (a*first+b*second)%7;
            num.push_back(f);
            second = first;
            first = f;
            cnt++;

            //当元素持续相等超过可信阈值后,可以认为已经出现循环节
            if(num[cnt] == num[cnt-d])
            {
                flagtrue++;
            }else
            {
                flagtrue = 0;
                flagfalse ++;
            }

            //当元素不等超过阈值后,迭代加深d的值
            if(flagfalse > MAXN)
            {
                d++;
                flagfalse=0;
            }
        }
        if(n-1>cnt) printf("%d\n",num[cnt-d+(n-1-cnt)%d]);
        else printf("%d\n",num[n-1]);
    }
    return 0;
}
ACM之数列循环节 初次接触这道题,我便想到了原来的写过的斐波拉契数列,便用一个个递推的函数从n一个一个的计算,直到运算出f[n]的值,结果呢,可想而知,不是时间超时,便是堆栈溢出! 后面才知道这种题一定存在一个循环的节点,而你所做的便是通过程序或这自己的计算得到出现循环的位置!下面通过代码解释:接下来这题也是数列循环节的问题 此题便既可以通过程序寻找循环的节点,亦可以同过数学运算得到循环的节点: 阅读详情

相关推荐

分数化小数并找出循环节

输入两个数字m,n,输出m/n的结果,并找出循环节 0<=m,n<=10000

************求循环节数知识储备***************

蓝桥杯赛题—-求循环节数实战 内涵代码解析及vector的相关用法、find()函数的用法 适合于初次接触,内容较浅,但足以使用

weixin_55032390的博客 812

【Codesys】获取从站信息,判断是否从站断联,总线丢失

获取EtherCAT从站信息,判断是否从站断联,总线丢失

qq_35316470的博客 5731

二维数组中的查找(一层循环)

力扣 剑指 Offer 04. 二维数组中的查找

qq_58785091的博客 203

ADS2023实战:2.4GHz超外差接收机从设计到链路预算全流程解析

本文以ADS 2023软件为平台,详细解析了2.4GHz超外差接收机从核心指标定义、架构原理到完整链路搭建与仿真的全流程。通过实战演练,重点阐述了如何利用ADS进行谐波平衡仿真和链路预算分析,以量化评估系统增益、噪声系数等关键性能,为射频工程师提供了一套从理论到仿真的系统级设计方法。

herb5的博客 816

Multisim实战:从8选1到32选1数据选择器的完整搭建指南(附常见问题解决)

本文提供了一份详尽的Multisim实战指南,手把手教你从基础的8选1数据选择器开始,逐步级联搭建16选1乃至32选1数据选择器。文章深入剖析了级联的核心逻辑、片选方案以及使用译码器的专业方法,并附带了电源连接、输出冲突、信号毛刺等常见问题的诊断与解决技巧,帮助电子工程学生和爱好者扎实掌握数字电路的系统设计与仿真调试。

dd012的博客 729

LeetCode457.环形数组是否存在循环

存在一个不含0的环形数组nums,每个 nums[i] 都表示位于下标 i 的角色应该向前或向后移动的下标个数: 1)如果 nums[i] 是正数,向前移动 nums[i] 步 2)如果 nums[i] 是负数,向后移动 nums[i] 步 因为数组是环形的,所以可以假设从最后一个元素向前移动一步会到达第一个元素,而第一个元素向后移动一步会到达最后一个元素。 数组中的循环由长度为k的下标序列seq: 1)遵循上述移动规则将导致重复下标序列 seq[0] ->seq[1] -> ....

y_m_h的博客 339

从压电传感器到示波器:手把手教你用CA3140搭建电荷放大器(含PCB布局与调零技巧)

本文详细介绍了如何使用CA3140运算放大器搭建专业级电荷放大器,从压电传感器信号特性分析到PCB布局与调零技巧,全程实战演示。重点解析了CA3140的低通滤波器设计、反馈网络参数计算及抗干扰增强方案,帮助电子爱好者高效实现微弱电荷信号的稳定转换与测量。

weixin_31355483的博客 597

18940 最小循环节(KMP算法)

18940 最小循环节(KMP算法) 时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC Description 给定一个字符串,请计算这个字符串最多是由多少个相同的子字符串重复连接而成的。 如:acacac 最多有 3 个 ac 连接而成,bbbb最多由4个b连接而成,abc最多由1个abc连接而成。 此问题需求出整个字符串的最大相同真前后缀,需使用kmp算法或字符串哈希法,具体解释可看下图或百度最小循环节。 输入格式 一个字符串,长

Rayzihao的博客 843

Prokka实战:10分钟搞定细菌基因组注释(附详细参数解析)

本文深入解析Prokka细菌基因组注释工具的核心参数与实战策略。通过拆解其集成化工作流程,详细解读物种分类、功能注释、输出控制等关键参数,并提供快速初筛、高质量发表、质粒注释及批量处理四种典型场景的高效参数组合方案,帮助用户精准掌控注释过程,将原始序列转化为有价值的生物学见解。

weixin_29271053的博客 442

传感器使用——ESP-WROOM-32 and INMP441麦克风音频采集

传感器使用——ESP-WROOM-32 and INMP441麦克风音频采集,数据显示及matlab操作界面。

qq_41958946的博客 7354

杭电OJ【1005】Number Sequence 递归循环节

思路分析: 递归可能会出现循环节。所以当出现循环时要结束递归。 代码: #include using namespace std; int f[1000]; int main() {     int a,b,c,i,j,s;         f[1]=1;         f[2]=1;     while(cin>>a>>b>>c&&a&&b&&c)     {

戦う! 345

激光除草技术原理与应用全解析

激光除草技术通过光热、光化学等效应精准破坏杂草组织,核心参数包括功率(20-6000W)、波长(400nm-10.6μm)和脉冲宽度。主要应用于大田作物(如玉米、棉花)、经济作物(烟草、果树)及城市绿化,具有环保(无化学污染)、高效(识别率≥95%)和非接触等优势,但存在设备成本高(20-50万元)、技术门槛高等局限。当前技术融合AI识别、多光谱协同等创新,国产设备如华工智耘已实现95.3%识别精度。虽短期投入较高,但长期可降低30%除草成本,并带来环境效益(每亩减排1.2吨CO₂)

start_up_go的博客 556

算法中常见的数组问题

求数组中,最长上升字串问题: a.连续最长严格上升字串:CF702A求数组中,K组连续M个数之和最大的问题: 前缀和+二维dp:CF467C求数组中,最大和的字串: HDUOJ 1003

ShellDawn的博客 639

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HDU题解索引

HDU 1000 A + B Problem I/O HDU 1001 Sum Problem 数学 HDU 1002 A + B Problem II 高精度加法 HDU 1003 Maxsum 贪心 HDU 1004 Let the Balloon Rise 字典树,map HDU 1005 Number Sequence 求数列循环节 HDU 1007 Quoit...

weixin_30780221的博客 354

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

51nodoj 1272 最大距离(最大循环节)

1272 最大距离 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 给出一个长度为N的整数数组A,对于每一个数组元素,如果他后面存在大于等于该元素的数,则这两个数可以组成一对。每个元素和自己也可以组成一对。例如:{5, 3, 6, 3, 4, 2},可以组成11对,如下(数字为下标): (0,0), (0, 2)

fenghoumilin的博客 470

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

求循环节(C语言)

​对于任意的真分数 N/M ( 0 < N < M ),均可以求出对应的小数。如果采用链表存储各位小数,对于循环节采用循环链表表示,则所有分数均可以表示为如下链表形式。 输入:N M 输出:整个循环节 要求: 编写一个尽可能高效的查找循环节起始点的函数: NODE * find( NODE * head, int * n) 。函数的返回值为循环节的起点(即图中的指针p),n为循环节的长度。 说明:提交程序时请同时提交将分数转换为小数的函数 change( int n, int m, NODE

2301_79497461的博客 796

找循环节

http://dmnotdm.cn/problem.php?id=1020 #include #include #include #include using namespace std; long long t,n,m,k,pos[100005],a[100005],tmp; int main() { int i; scanf("%lld",&t); w

梦醒了 749

数字序列-找循环节

//f(1)=1,f(2)=1,f(n)=(a*f(n-1)+b*f(n-2))mod7 #include <bits/stdc++.h> using namespace std; int main() { int i,j,a,b,n; int c[50]; while(cin>>a>>b>>n) { if(a==0&&b==0&&n==0) break;

c 405

C++之求循环小数循环节

■题目描述 任意分数都可以写成小数的形式,样例是有限小数或无限循环小数中的一种。 ■输入描述: 两个正整数p和q,代表分子和分母。 两个正整数p和q,代表分子和分母.且1 < p,q≤10^12 ■输出描述: 如果p/q为有限小数,则输出-1。 如果p/q为有限小数,则输出-1.否则输出循环节前面部分的长度、以及循环节的长度。 否则输出循环节前面部分的长度、以及循环节的长度. ■代码 #include<iostream> using na...

m0_60188719的博客 3840

寻找循环节

链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1100 碰到递推大数再取模的问题,如果MOD不是特别大的情况下,而且f[i]的值比较连续的情况下可以考虑采用寻找循环节的方法解题,当然为了提高程序的效率,递推的过程可以采用矩阵快速幂(请参考矩阵快速幂II); 寻找循环节的方法

Epic丶玖遇 3261

数组循环的六种方法

1.forEach() let array = [1,2,3,4]; array.forEach((item, index, array) => {   console.log(item); }); forEach会遍历数组, 没有返回值, 不允许在循环体内写return, 不会改变原来数组的内容.forEach()也可以循环对象。 2.map() let array = [1, 2, 3...

lifangfang0607的博客 3万+

KMP算法-next数组的应用-循环节问题

先来个next数组模板 void Next() { int i=0,j=-1; next[0]=-1; while(i<len) { if(s[i]==s[j]||j==-1) next[++i]=++j; else j=next[j]; } } 首先 1:i-next[i]是最小循环节的长度  2:字符串的循环条件是i%(i-next[i])==0&&nex

jadeyansir的博客 621

next数组-循环节

废话 又是热血沸腾的写了一发kmp,看完题目,蹦出个循环节,Emmm… 不是废话 结论: 设len=n−nxt[n] (1) nxt[n]=0 不存在循环节 (2) nxt[n]>0 && n%len≠0 存在循环节但是长度不整除 (3) nxt[n]>0 && n%len=0 存在整除循环节 而且更长的循环节一定是len的倍数。 题目 题目点我 题目意思呢就是给你一个字符串,求这个字符串到第i个字符为止的循环节的次数。 比如aabaabaabaab,长度为12

made我好辣鸡 410
上一篇: C++:HDUOJ 1004
下一篇: Mac brew install mysql
ShellDawn
博客等级 码龄10年 75粉丝 756原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值