博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求解回文序列问题
阅读量:5259 次
发布时间:2019-06-14

本文共 933 字,大约阅读时间需要 3 分钟。

【问题描述】

  如果一个数字序列逆置后跟原序列是一样的,则称这样的数字序列为回文序列。

  例如:{1,2,1}、{15,78,78,15}、{11,2,11}是回文序列,而{1,2,2}、{15,78,87,51}、{112,2,11}不是回文序列。

  现在给出一个数字序列,允许使用一种转换操作:选择任意两个相邻的数,然后从序列中移除这两个数,并将这两个数的和插入到这两个数之前的位置(只插入一个和)。

  对于所给的序列求出至少需要多少次操作可以将其变成回文序列。

  输入描述:输入为两行,第一行为序列长度n(1<=n<=50),第二行为序列中的n个整数item[i](1<=item[i]<=1000),以空格分隔。

  输出描述:输出一个数,表示最少需要的转换次数。

  输入样例:

    4

    1 1 1 3

  样例输出

    2

【思路】

  这样的问题采用递归调用比较简单,而递归的核心思想:大问题转换为小问题加上特殊出口。

  对输入的数组进行第一个数和最后一个数同时扫描,如果相等,跳过两个数的处理,第一位向后移动一位,最后一位向前移动一位。若不相等,第一种情况:第一位小于最后一位,则将第一位与它后一位相加为一个数,记录一次操作,进入递归。第二种情况:第一位大于最后一位:将最后一位与它前一位相加为一个数,记录一次操作,进入递归。

  当前面扫描与后面扫描相遇时停止递归(特殊出口)。

【代码】

1 #include
2 int hui(int a[],int n,int i,int j,int t) 3 { 4 if(i>=j)return(t); 5 else if(a[i]==a[j])hui(a,n,i+1,j-1,t); 6 else if(a[i]
a[j])17 {18 a[j-1]+=a[j];19 int k;20 for(k=j;k

【示例】

 

转载于:https://www.cnblogs.com/fan979398/p/9826409.html

你可能感兴趣的文章
帧的最小长度 CSMA/CD
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
电子眼抓拍大解密
查看>>
poj 1331 Multiply
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
P1107 最大整数
查看>>
多进程与多线程的区别
查看>>
Ubuntu(虚拟机)下安装Qt5.5.1
查看>>
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
查看>>