刷刷笔试题~~[各种各样的回文序列!!!]
来源:互联网 发布:怎么上淘宝首页 编辑:程序博客网 时间:2024/04/30 06:31
1.[编程题]回文序列
如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:
{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,
{1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。
现在给出一个数字序列,允许使用一种转换操作:
选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。
现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列。
{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,
{1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。
现在给出一个数字序列,允许使用一种转换操作:
选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。
现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列。
输入描述:
输入为两行,第一行为序列长度n ( 1 ≤ n ≤ 50)第二行为序列中的n个整数item[i] (1 ≤ iteam[i] ≤ 1000),以空格分隔。
输出描述:
输出一个数,表示最少需要的转换次数
输入例子:
41 1 1 3
输出例子:
2
解析:
看着很难,但是实际上可以好好简化一下
把题目中的序列存进一个数组a[]中
两个指针i,j,从两边开始比较,相等的话,都往中间移动,
如果a[i]<a[j],让a[i]和后面的数相加,也就是a[i+1]=a[i]+a[i+1],然后 i 移动到 i+1,j不动,继续比较a[i+1]和a[j]
如果a[i]>a[j],让a[j]和前面的数相加,也就是a[j-1]=a[j]+a[j-1],然后j移动到j+1,i不动,继续比较a[i]和a[j-1]
import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int n=sc.nextInt(); int a[]=new int[n]; for(int k=0;k<n;k++){ a[k]=sc.nextInt(); } int i=0; int count=0; for(int j=a.length-1;j>i;j--){//这里的判断条件是j>i,,,用这种方法遍历i,j其实很方便 if(a[i]==a[j]){ i++; }else if(a[i]>a[j]){ a[j-1]+=a[j]; count++; }else{ a[i+1]+=a[i]; i++; j++; count++; } } System.out.println(count); } }}
0 0
- 刷刷笔试题~~[各种各样的回文序列!!!]
- 刷刷笔试题~~[递归]
- 刷刷笔试题~~[概率]
- 刷刷笔试题~~[数组]
- 刷刷笔试题~~[sql]
- 刷刷笔试题~~ [Java]
- 刷刷笔试题~~[矩阵]
- 刷刷笔试题~~[操作系统!!!]
- 网易笔试题:回文序列
- 网易笔试题:回文序列
- 刷刷笔试题~(1)
- 刷刷笔试题~(2)
- 刷刷笔试题~~(3)
- 刷刷笔试题~~~[动态规划!!!!]
- 刷刷笔试题~!![二叉树]
- 刷刷笔试题--贪心算法
- 刷刷笔试题--[链表类编程]
- 刷刷笔试题~~[回溯法]
- mx6_sabresd_board_init()
- 【hdu 5894】【组合数学 lucas 费马小求逆元】 【m个人坐n个围成一周的位置每个人距离至少为k,求方法数】
- FAQ:所遇到的Python的所有问题
- [Win32]一个调试器的实现(二)调试事件的处理
- 邮件原理与JavaMail开发(二)——使用JavaMail创建邮件和发送邮件
- 刷刷笔试题~~[各种各样的回文序列!!!]
- vs2010项目属性配置
- Android进阶之(Service详解一)
- Photoshop Scripting 高阶编程(1):取色器的应用
- 《JAVA知识点列表》V1.0
- C#入门经典第6版学习 十
- 学好JS,走哪儿都不怕(JS书单)
- Day06(上)C++继承和派生
- servlet知识