解题思路:由于每个数只要头和尾,而其中尾只能是0到9,即使当尾为0时不能继续接,也要用10个参数来储存尾巴为0到9的最大长度即可。

p[10]的1到9对应当前尾巴为1到9的长度最长的值,所以每拿到一个新的数,只要检测这个数接上去是否可以使某一个数组最大值增加。

具体表现为先提取头,然后接到尾巴为该数的数组,即对应数组+1,然后与新的数的尾巴原对应的数组进行对比,也就是p[头]+1>p[尾],

大于成立时,将尾巴对应的数组赋值为新的最大值,此时只更新了新的数尾巴对应的数组,所以原先头对应的数组不变。

说白了就是for循环每次都更新尾号0到9的最大长度就是了。

注意事项:
将数组长度要定义到10,是因为尾巴可能为0,并且用1到9对应数组时就不用加一。即使新的数尾巴为0,也要将该值进行上述更新,因为不排除长度最长时尾巴为0的情况。

参考代码:

int main(){
int n,x,a,p[10]={0};
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a);
        x=a%10;                       //x为当前该数的尾数
        while(a/10)a/=10;             //将a变成该数的头
            if(p[a]+1>p[x])p[x]=p[a]+1;  //判断该数的头对应的数组加1是否能大于该数的尾巴对应数组的长度。当尾巴为0时,长度储存在p[0]
    }
    for(int i=1;i<10;i++)if(p[i]>p[0])p[0]=p[i];  //最终将尾巴为0到9的最大值传给p[0]
    printf("%d",n-p[0]);  
    return 0;
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论