第十三届蓝桥杯国赛 C++ C 组 Java A 组 C 组 Python C 组 E 题——斐波那契数组(三语言代码AC)

目录

  • 1.斐波那契数组
    • 1.题目描述
    • 2.输入格式
    • 3.输出格式
    • 4.样例输入
    • 5.样例输出
    • 6.数据范围
    • 7.原题链接
  • 2.解题思路
  • 3.Ac_code
    • 1.Java
    • 2.C++
    • 3.Python

1.斐波那契数组

1.题目描述

如果数组 A = ( a 0 , a 1 , ⋯ . a n − 1 ) A=(a_0,a_1,⋯.a_{n-1}) A=(a0,a1,.an1)满足以下条件, 就说它是一个斐波那契数组:

  1. n ≥ 2 ; n≥2; n2;
  2. a 0 = a 1 a_0=a_1 a0=a1
  3. 对于所有的 i ( i ≥ 2 ) , i(i≥2), i(i2),都满足 a i = a i − 1 + a i − 2 。 a_i=a_{i-1}+a_{i-2}。 ai=ai1+ai2

现在, 给出一个数组 A A A, 你可以执行任意次修改, 每次修改将数组中的某 个位置的元素修改为一个大于 0 的整数。请问最少修改几个元素之后, 数组 A A A 会变成一个斐波那契数组。

2.输入格式

输入的第一行包含一个整数 n n n,表示数组 A A A 中的元素个数。
第二行包含 n n n 个整数 a 0 , a 1 , ⋯ . a n − 1 , a_0,a_1,⋯.a_{n-1}, a0,a1,.an1,相邻两个整数之间用一个空格分隔。

3.输出格式

输出一行包含一个整数表示最少需要修改数组 A A A 中的几个元素之后, 数组 A A A 可以变为一个斐波那契数组。

4.样例输入

5
1 2 2 4 8

5.样例输出

3

6.数据范围

2 ≤ n ≤ 1 0 5 , 1 ≤ a i ≤ 1 0 6 。 2≤n≤10^5,1≤a_i≤10^6。 2n105,1ai106

7.原题链接

斐波那契数组

2.解题思路

首先考虑斐波那契数组具有什么性质,我们令 a 0 = a 1 = 1 a_0=a_1=1 a0=a1=1去打印出前30位斐波那契数。
在这里插入图片描述
不难发现,在不到30位的情况下,斐波那契数组的值已经超出了1e6,而注意到题目给定的 a i a_i ai 的最大值才为 1e6。这说明其实后面的数我们根本无需考虑,都是必须要修改的。

接下来我们就只需要考虑前30位数最多可以保留多少个数,假设最多可以保留x个数,那么答案就为n-x

对于斐波那契数列,如果 a 0 a_0 a0 确定了,那么整个数列都确定了。所以我们可以枚举 a 0 a_0 a0 的值,枚举的范围为 [ 1 , 1 0 6 ] 。 [1,10^6]。 [1,106]然后去计算出前三十位的值,看与原数组符合预期的数有多少个,所有符合预期的数量取一个最大值x,最终答案即为n-x

时间复杂度 O ( 30 ∗ 1 0 6 ) O(30*10^6) O(30106)

3.Ac_code

1.Java

import java.io.*;
import java.util.Scanner;

public class Main {
    static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    static int[] arr = new int[50];
    static int V = 1000000;

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        //表示无穷大
        int res = 0x3f3f3f3f;
        int n = sc.nextInt();
        int count = n;
        //我只读入前三十个数
        if (n > 30) n = 30;
        for (int i = 1; i <= n; i++) {
            arr[i] = sc.nextInt();
        }
        //枚举开头是多少         30*1e6   3e7
        for (int i = 1; i <= V; ++i) {
            int a = i, b = i, c = 0;
            int ans = 0;
            if (arr[1] == a) ans++;
            if (arr[2] == b) ans++;
            for (int j = 3; j <= 30; ++j) {
                c = a + b;
                //这里是一个减枝
                if (c > V) break;
                if (c == arr[j]) ans++;
                a = b;
                b = c;
            }
            res = Math.min(count - ans, res);
        }
        out.println(res);
        out.flush();
    }
}

2.C++

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int inf = 0x3f3f3f3f;
const int V=1000000;

int n;
int arr[50];
int res=inf;
int main() 
{
    scanf("%d",&n);
    int count=n;
    //只需要考虑前30位数
    if(n>30) n=30;
    for(int i=1;i<=n;++i){
        scanf("%d",&arr[i]);
    }
    //起始的数(f[1]的值)
    for(int i=1;i<=V;++i){
        //a,b,c作为滚动数组枚举斐波那契数
        LL a=i,b=i,c=0;
        int ans=0;
        if(arr[1]==a) ans++;
        if(arr[2]==b) ans++;
        for(int j=3;j<=30;++j){
            c=a+b;
            //没必要继续下去
            if(c>V) break;
            if(c==arr[j]) ans++;
            a=b,b=c;
        }
        res=min(count-ans,res);
    }
    printf("%d\n",res);
    return 0;
}

3.Python

v=1000000
res=float("inf")
n=int(input())
count=n
if n>30:
    n=30
arr=[0]*50
l=list(map(int,input().split()))
for i in range(1,n+1):
    arr[i]=l[i-1]
for i in range(1,v+1):
    a,b,c=i,i,0
    ans=0
    if arr[1]==a:
        ans=ans+1
    if arr[2]==b:
        ans=ans+1
    for j in range(3,31):
        c=a+b
        if c>v:
            break
        if c==arr[j]:
            ans=ans+1
        a,b=b,c
    res=min(count-ans,res)
print(res)```

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VSCode 安装Flutter 教程

第一步 下载flutter https://docs.flutter.dev/development/tools/sdk/releases#windows 第二部 配合环境变量 1、官方文档的是Linux的下载方法 export PUB_HOSTED_URLhttps://pub.flutter-io.cn export FLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn2、window的…

Mac中罗技logi options+下载问题

Mac中罗技logi options下载问题 捣鼓了一个上午解决了下载不了 页面卡住 windows中直接下载配置就行 Mac中&#xff1a; 1.到官网下载 logi options 官网下载 尝试安装 这块是卡在这下不了的 找到next.json文件&#xff08;mac上文件管理直接搜索就行&#xff09; 或者 find…

凤凰架构-周志明

一.演进 服务架构演进史 架构并不是被发明出来的&#xff0c;而是持续演进的结果。 原始分布式时代 UNIX 的分布式设计哲学 Simplicity of both the interface and the implementation are more important than any other attributes of the system — including correctness,…

物联网--Zigbee协议(二):Zigbee协议架构以及数据帧结构

上一篇整理了关于Zigbee协议的一些基础知识&#xff0c;接下来主要讨论Zigbee协议的架构&#xff0c;希望通过这篇文章能够帮助小伙伴们更好地理解Zigbee协议&#xff0c;废话不多说&#xff0c;进入正题吧。 文章目录一、Zigbee协议架构二、Zigbee协议的数据帧结构总结一、Zig…

92年程序员发帖晒薪资称自己很迷茫,网友:老弟你可以了

当下&#xff0c;是一个“向钱看&#xff0c;向厚赚”的社会。快节奏的生活下&#xff0c;家庭、工作各方面压力很容易使年轻人陷入迷茫和焦虑。 与其他行业相比&#xff0c;程序员的高薪让人羡慕。那么&#xff0c;对于那些真正达到这么多收入的人来说&#xff0c;他们是怎么…

Redis缓存优化

数据库在用户数量多&#xff0c;系统访问量大的时候&#xff0c;系统性能会下降&#xff0c;用户体验差。1.缓存优化作用&#xff1a;1.降低数据库的访问压力2.提高系统的访问性能3.从而提高用户体验实现思路&#xff1a;1.先查询缓存2.如果缓存有数据&#xff0c;直接返回3.如…

【第017问 Unity Physics.OverlapSphere如何检测附近玩家?】

一、背景 如何检测一个对象范围内的玩家&#xff0c;这个可以直接使用距离判定&#xff0c;物体射线检测等相关方式&#xff1b;这里采用Physics.OverlapSphere的方式来实践其过程&#xff0c;并对Physics.OverlapSphere的使用做一下记录&#xff1b; 二、Physics.OverlapSph…

FFMPEG将视频切片成ts文件并对ts文件进行ASE加密,并合并成M3U8操作方法

环境&#xff1a;centos7 开发语言&#xff1a;php 框架&#xff1a;视频转码服务系统 生成ASE加密文件需要用到的命令&#xff1a; #!/bin/sh BASE_URL${1:-.} openssl rand 16 > file.key echo $BASE_URL/file.key > file.keyinfo echo file.key >> file.key…

Unity --- Transform类

1.一个很有意思的事实是Transform类不仅用来管理游戏物体的位置缩放旋转&#xff0c;还用来管理游戏物体的父物体与子物体之间的关系 当游戏物体A的trasnform类a是游戏物体B的transform类b的父类的话&#xff0c;游戏物体A就是游戏物体B的父物体 2.如何访问脚本当前挂载的游戏…

Unity IL2CPP 游戏分析入门

一、目标 很多时候App加密本身并不难&#xff0c;难得是他用了一套新玩意&#xff0c;天生自带加密光环。例如PC时代的VB&#xff0c;直接ida的话&#xff0c;汇编代码能把你看懵。 但是要是搞明白了他的玩法&#xff0c;VB Decompiler一上&#xff0c;那妥妥的就是源码。 U…

GPT-4创造者:第二次改变AI浪潮的方向

OneFlow编译 翻译&#xff5c;贾川、杨婷、徐佳渝 编辑&#xff5c;王金许 一朝成名天下知。ChatGPT/GPT-4相关的新闻接二连三刷屏朋友圈&#xff0c;如今&#xff0c;这些模型背后的公司OpenAI的知名度不亚于任何科技巨头。 不过&#xff0c;就在ChatGPT问世前&#xff0c;Ope…

昇腾AI机器人发布,12家企业、5家高校签约,昇腾AI开发者创享日全国巡展沈阳首站成功举办

“创未来&#xff0c;享非凡”昇腾AI开发者创享日2023年全国巡回首站活动成功举办&#xff0c;本次活动由辽宁省科技厅指导&#xff0c;由沈阳市科技局、浑南区人民政府、沈阳高新区管理委员会、华为技术有限公司共同主办&#xff0c;沈阳昇腾人工智能生态创新中心承办&#xf…

使用R语言包clusterProfiler做KEGG富集分析时出现的错误及解决方法

使用enrichKEGG做通路富集分析时&#xff0c;一直报错&#xff1a;显示No gene can be mapped....k <- enrichKEGG(gene gene, organism "hsa", pvalueCutoff 1, qvalueCutoff 1)但是之前用同样的基因做分析是能够成功地富集到通路&#xff0c;即便是网上的数据…

Postman下载与安装操作步骤【超详细】

&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是超梦梦梦梦&#xff0c;很高兴认识大家~&#x1f357;关注➕点赞➕评论➕收藏 &#x1f604;&#x1f64f;博主水平有限&#xff0c;如有错误&#xff0c;欢迎各位大佬纠正 Postman下载与安装&#x1…

STM32单片机通过ESP8266WiFi模块与Android APP实现数据传输(二)---上位机搭建

事物的难度远远低于对事物的恐惧 完成对STM32单片机和ESP8266 WiFi模块的配置之后&#xff0c;接下来需要完成Android APP代码的编写以及实现。 1.添加网络权限 因为我们需要对WiFi进行操作&#xff0c;所以需要网络的权限&#xff0c;在AndroiManifest.xml文件中加入以下代码…

Liunx创建用户与授权大招以及Linux修改SSH端口

1、Liunx创建用户与授权 背景&#xff1a;大家个人建站学习的时候&#xff0c;经常会涉及到创建Linux用户&#xff0c;授权用户&#xff0c;网上一堆操作各种不好使&#xff0c;小编总结了一个最好用的写法供大家使用。 还有个人云服务遭受挖矿攻击的情况&#xff0c;建议大家也…

mac maven安装和配置本地仓库

首先我们需要下载&#xff1a;maven官网下载地址传送门 x.x.x-bin.zip(Windows系统的) 找到x.x.x-bin.tar.zip(mac系统的) 备注&#xff1a;下面的图截错了&#xff0c;抱歉 下载完成之后&#xff0c;可以在右下角的下载找到 然后双击这个 .zip 压缩包 &#xff0c;可以进行…

解决使用WinScp连接Ubantu系统失败的问题---SSH无法连接

起因 为了互通Linux系统和Windows系统的文件&#xff0c;以更好的实现文件管理和资源共享。 所以在查阅资料后&#xff0c;使用WinScp&#xff0c;WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。它的主要功能就是在本地与远程计算机间安全的复制文件。winscp也可…

Python的23种设计模式(完整版带源码实例)

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; Python的23种设计模式 一 什么是设计模式 设计模式是面对各种问题进行提炼和抽象而形成的解决方案。这些设计方案是前人不断试验&…

猿创征文 | re:Invent 朝圣之路:“云“行业风向标

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; AWS 亚马逊云科技re:Invent全球大会 2022年亚马逊云科技re:Invent全球大会震撼来袭&#xff0c;即将于北京时间11月30日-12月2日在美国内华达州&#xff0c;拉斯维加斯…
最新文章