zoukankan      html  css  js  c++  java
  • 蓝桥杯 密码脱落 递归思路



    密码脱落


    X星球的考古学家发现了一批古代留下来的密码。
    这些密码是由A、B、C、D 四种植物的种子串成的序列。
    仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。
    由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。


    你的任务是:
    给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。


    输入一行,表示现在看到的密码串(长度不大于1000)
    要求输出一个正整数,表示至少脱落了多少个种子。


    例如,输入:
    ABCBA
    则程序应该输出:
    0


    再例如,输入:
    ABDCDCBABC
    则程序应该输出:
    3


    资源约定:
    峰值内存消耗 < 256M
    CPU消耗  < 1000ms


    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。


    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。


    注意: main函数需要返回0
    注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
    注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。


    提交时,注意选择所期望的编译器类型。

    个人写的源代码如下(欢迎批评改善)

    #include<iostream>
    #include<string.h>
    using namespace std;
    char s[1005];
    int fun(int pos1,int pos2)
    {
    if(pos1>=pos2)return 0;
    int l=pos1;int r=pos2;
    int n1=0;int n2=0;
    while(s[r--]!=s[pos1]&&r>pos1)n1++;
    while(s[l++]!=s[pos2]&&l<pos2)n2++;
    if(r==pos1||l==pos2)return pos2-pos1;
    else 
    return (n1+fun(pos1+1,pos2-n1-1))<(n2+fun(pos1+n2+1,pos2-1))? (n1+fun(pos1+1,pos2-n1-1)):(n2+fun(pos1+n2+1,pos2-1));

    }
    int main()
    {
    cin>>s;
    int len;int i;
    for(i=0;s[i]!='';i++)len++;
    len=i;

    int pos1=0;int pos2=len-1;
    cout<<fun(pos1,pos2)<<endl;
    return 0;



  • 相关阅读:
    Analysis Services features supported by SQL Server editions
    Azure DevOps to Azure AppServices
    Power BI For Competition
    Win10开机“提示语音”以及”随机播放音乐”
    Azure DevOps
    Allow Only Ajax Requests For An Action In ASP.NET Core
    Mobile CI/CD 101
    Configure SSL for SharePoint 2013
    AWS Step Function Serverless Applications
    Cordova Upload Images using File Transfer Plugin and .Net core WebAPI
  • 原文地址:https://www.cnblogs.com/linruier/p/9485210.html
Copyright © 2011-2022 走看看