《菲波那契凤尾》:菲波那契数列,返回最后6位

news2024/11/17 21:44:04

目录

一、题目

二、思路

1、斐波那契数列

2、返回最后6位

 三、代码

详细注释版本:

简化注释版本:


一、题目

菲波那契凤尾     题目链接:菲波那契凤尾

        NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。

输入描述:
        输入有多组数据。
        每组数据一行,包含一个整数n (1≤n≤100000)。

输出描述:
        对应每一组输入,输出第n个斐波那契数的最后6位。示例1
输入
1

2

3

4

100000
输出
1

2

3

5

537501

二、思路

1、斐波那契数列

2、返回最后6位

        返回有格式要求,即如果斐波那锲数 的位数小于 6 位,就直接返回;如果超过了6 位,就返回最后 6 位。

        我们可以在初始化斐波那锲数列数组的时候就进行相应的处理,即 % 1000000 。

         因此使用 printf 格式化输出。

%d :正常输出十进制数 。

%Yd:十进制数,输出 Y 位。如果本身大于 Y 位,正常输出。

%XYd:十进制数,输出 Y 位,不足 Y 位就补 X 。如果本身大于 Y 位,正常输出。

%d:十进制数正常输出 。

%2d:十进制数,输出 2 位。如果本身大于 2 位,正常输出。

%02d :十进制数,输出 2 位,不足 2 位就补 0 。如果本身大于 2 位,正常输出。

 注意:

        题目中要求的不满6位的直接输出这个数字,而不是前面是空格。因此我们还要进行分类讨论,讨论什么时候斐波那锲数小于 6 位,什么时候斐波那锲数大于6位。  

 三、代码

        注意在写代码的过程中,构造斐波那锲数列的代码不能放在 while输入循环中,否则每次输入一个数,就要再重新构造一个 100000 个数的斐波那锲数列。会使运行时间大大增加。导致提交不成功,显示超时。

详细注释版本:

import java.util.Scanner;
/**
 * Created with IntelliJ IDEA.
 * Description:菲波那契凤尾
 * User: WangWZ
 * Date: 2023-04-13
 * Time: 12:49
 */
public class Main {
    public static void main(String[] args) {
        //注意:在输入外面构建一个菲波那契数列
        //因为要判断什么时候数小于6 位,什么时候大于6位
        //所以设置一个边界值,当边界值改变时,就说明数已经大于 6 位了
        int border = -1;
        //先生成 100000的斐波那锲数列
        long[] arr = new long[100000];
        arr[0] = 1;
        arr[1] = 2;
        for(int i = 2; i < 100000;i++) {
            long m = arr[i - 1] + arr[i - 2];
            //对 m 值进行判断,如果 m 值大于6 位了,说明边界需要发生改变
            //border记录的是第几个数字开始就大于6位了
            //所以是 i + 1
            //第一个数: 下标 0
            //第二个数: 下标 1
            //第 i 个数:下标 i - 1
            //倒过来就是,已知下标 i 的元素,则它就是第 i + 1个元素。
            //注意只用在第一次遇到大于6位的时候进行改变,因为后面的肯定也都大于6位
            //所以判断条件中要加上 boeder == -1
            if(border == -1 && m >= 1000000) {
                border = i + 1;
            }
            //因为只需要后 6 位,所以可以使用 % 100000 来只保存后6位
            arr[i] = m % 1000000;
        }
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int n = scanner.nextInt();
            long ans = arr[n - 1];
            if(n < border) {
                //说明小于等于6位,直接输出
                System.out.printf("%d\n",ans);
            } else {
                System.out.printf("%06d\n",ans);
            }

        }
    }
}

简化注释版本:

import java.util.Scanner;
/**
 * Created with IntelliJ IDEA.
 * Description:菲波那契凤尾
 * User: WangWZ
 * Date: 2023-04-13
 * Time: 12:49
 */
public class Main {
    public static void main(String[] args) {
        //所以设置一个边界值,当边界值改变时,就说明数已经大于 6 位了
        int border = -1;
        //斐波那锲数列
        long[] arr = new long[100000];
        arr[0] = 1;
        arr[1] = 2;
        for(int i = 2; i < 100000;i++) {
            long m = arr[i - 1] + arr[i - 2];
            //对 m 值进行判断,如果 m 值大于6 位了,说明边界需要发生改变
            if(border == -1 && m >= 1000000) {
                border = i + 1;
            }
            //因为只需要后 6 位,所以可以使用 % 100000 来只保存后6位
            arr[i] = m % 1000000;
        }
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int n = scanner.nextInt();
            long ans = arr[n - 1];
            if(n < border) {
                //说明小于等于6位,直接输出
                System.out.printf("%d\n",ans);
            } else {
                System.out.printf("%06d\n",ans);
            }

        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/419589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【实用篇】SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud分布式

文章目录一、服务拆分1.1 服务拆分Demo1.2 微服务远程调用二、Eureka2.1 Eureka原理2.2 Eureka-server服务搭建2.3 eureka-client服务注册2.4 eureka-client服务复制2.5 eureka服务发现三、Ribbon负载均衡3.1 负载均衡原理3.2 负载均衡策略3.3 自定义负载均衡策略3.4 饥饿加载与…

每日学术速递4.12

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.HC 随着新的“生成代理”论文的发布&#xff0c;LLM刚刚达到了一个重要的里程碑——通过使用 LLM&#xff0c;生成代理能够在受《模拟人生》启发的交互式沙箱中模拟类人行为。代理架构扩展…

Vue的过滤器、内置指令和生命周期【Vue】

Vue 1. 收集表单数据 收集表单数据&#xff1a; 若&#xff1a;< input type“text”/ >&#xff0c;则v-model收集的是value值&#xff0c;用户输入的就是value值。 若&#xff1a;< input type“radio”/ >&#xff0c;则v-model收集的是value值&#xff0c;且…

NIFI大数据进阶_离线同步MySql数据到HDFS_说明操作步骤---大数据之Nifi工作笔记0028

然后我们看如何把mysql中的数据,实时的同步到hdfs中去 准备工作首先,创建一个mysql表,然后启动hadoop集群 处理器我们需要这些处理器,首先通过querydatabasetable处理器,查询mysql中的数据,然后,把mysql中的数据,导入到 convertavrotojson处理器,注意querydatabasetable处理…

C语言结构体练习:【通讯录(静态数组简易版)的实现】

全文目录&#x1f600; 前言&#x1f914; 模块和功能划分&#x1f928; 数据类型的选择&#x1f62e; 功能序号类型 enum&#x1f62e; 个人信息类型 PeoInfo&#x1f62e; 通讯录类型 Contact&#x1f635;‍&#x1f4ab; 功能的实现&#x1f644; 初始化通讯录 InitContact…

MYSQL命令大全(详细版)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

【快乐手撕LeetCode题解系列】——移除链表元素

【【快乐手撕LeetCode题解系列】——移除链表元素&#x1f60e;前言&#x1f64c;删除有序数组中的重复项&#x1f64c;解法一&#xff1a;画图分析&#xff1a;&#x1f60d;思路分析&#xff1a;&#x1f60d;源代码分享&#xff1a;&#x1f60d;解法二&#xff1a;画图分析…

Vite打包后直接使用浏览器打开,显示空白问题

vite打包后&#xff0c;直接用浏览器打开显示空白 1.需求&#xff1a; 安卓webview等浏览器直接打开文件显示 2.原因 &#xff08;1&#xff09;资源路径错误&#xff1a; vite.config.js 配置 base: “./” &#xff08;在webpack中则配置publicPath: "./"即可…

Windows ActiveMQ安装

Windows ActiveMQ 安装 ActiveMQ下载&#xff1a;ActiveMQ Java JDK下载&#xff1a;Java JDK20 下载完成之后解压ZIP安装包&#xff0c;解压后得到如下文件夹 找到根目录下/bin/win64/activemq.bat 双击打开&#xff0c;如果提示权限记得使用管理员身份 。 如提示Unable to e…

学习数据结构第5天(线性表的链式表示)

线性表的链式表示单链表的定义单链表的基本操作双链表双链表的基本操作循环链表块状链表存储结构顺序表和链表的比较线性表的顺序存储结构的特点是逻辑关系上相邻的两个数据元素在物理位置上也是相邻的。我们会发现虽然顺序表的查询很快&#xff0c;时间复杂度为O(1)O(1)O(1),但…

Java EE企业级应用开发(SSM)第5章

第5章Spring MVC入门一.预习笔记 1.Spring MVC是所有使用OOP编程语言都应该遵守的规范 2.Spring MVC的特点 强大的灵活性、非侵入性和可配置性 提供了一个前端控制器DispatcherServlet&#xff0c;开发者无须额外开发控制器对象 分工明确&#xff0c;每一个功能由一个专门…

日前、日内两阶段需求响应热电综合能源联合调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

深度学习之卷积神经网络0基础入门学习教程——浅层深度学习(全网最详细,不详细你打我)(看不懂你打我)(对小白没用你打我)

作为一个双非学校的人工智能硕士研究生&#xff0c;我在深度学习入门之初&#xff0c;学校里没人带&#xff0c;只能靠自己一点一点的摸索&#xff0c;走了很多弯路&#xff0c;因为自己并不懂得从哪里入手&#xff0c;从吴恩达的课到李沐的课等等无数种课&#xff0c;无数种书…

Microsoft project 2013安装教程(含激活方法)

目录 一、介绍 二、安装教程 三、激活 一、介绍 Microsoft project 2013中文版是由微软推出的一款项目管理软件&#xff0c;软件将可用性、功能和灵活性等完美地融合在一起&#xff0c;可以有效提升办公人员的效率&#xff0c;利用project 2013用户可以制作出…

SecureCRT8.5的下载、安装和注册(详细图解)

SecureCRT8.5的下载、安装和注册请先关闭杀毒软件和防火墙。 关闭防火墙 先打开电脑的设置&#xff0c;在弹出的界面里找到并点击更新和安全。 找到并点击Windows 安全中心&#xff0c;再在右侧找到并点击防火墙和网络保护选项。 将域网络、专用网络、公用网络这三个选项设…

数据结构入门-11-红黑树

史上最负盛名的平衡二叉树–红黑树&#xff0c;但其实就是2-3树的一种实现 文章目录一、红黑树性质二、红黑树性质推导过程2-3树2.3.1 如何维护绝对平衡2-3树2.3.2 红黑树&2-3树2.3.3 再来看红黑树的性质1.每个节点为 Black or Red2.根节点是Black3.每一个叶子节点(最后的空…

2023年郑州重点建设项目名单公布,中创“算力数据中心”项目入选!

4月7日&#xff0c;郑州市人民政府网站公布2023年郑州市重点建设项目名单&#xff0c;名单共列项目680个&#xff0c;总投资1.08万亿元&#xff0c;年度计划投资2691亿元。 在创新驱动能力提升项目名单里&#xff0c;中创算力与人民网人民数据&#xff08;国家大数据灾备中心&a…

小程序实现消息订阅及发送

在我们的家政服务小程序中&#xff0c;用户可以新增预约。一般的场景是新增预约的时候提醒用户接收通知&#xff0c;在状态变更的时候我们来发送订阅消息。本篇我们来讲解一下小程序订阅消息功能的开发。 1 开通订阅消息模板 要想发送订阅消息&#xff0c;首先需要选用一个消…

【ES】数据同步集群

【ES】数据同步&集群3.数据同步3.1.思路分析3.1.1.同步调用3.1.2.异步通知3.1.3.监听binlog3.1.4.选择3.2.实现数据同步3.2.1.思路3.2.2.导入demo3.2.3.声明交换机、队列1&#xff09;引入依赖2&#xff09;声明队列交换机名称3&#xff09;声明队列交换机3.2.4.发送MQ消息…

解决macOS IntelliJ IDEA 卡顿问题

写在前面的话1&#xff1a;我在撰写这篇博客时候&#xff0c;所用的IntelliJ IDEA版本是IntelliJ IDEA 2022.3.3 (Ultimate Edition)&#xff0c;你需要知道可能对于不同的IntelliJ IDEA版本会有一定的差异 写在前面的话2&#xff1a;如果我这篇博客可以帮助到你&#xff0c;请…