解题思路:由于每个数只要头和尾,而其中尾只能是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 人评分
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:863 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:597 |
1118(求助_已解决)浏览:351 |
C语言训练-亲密数 (C语言描述,反正怎么都能对)浏览:2256 |
勾股数 (C语言代码)浏览:830 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:416 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:476 |
【计算直线的交点数】 (C语言代码)浏览:986 |
多输入输出练习2 (C语言代码)浏览:1710 |
孤独的骑士 (C语言代码)浏览:1416 |