zoukankan      html  css  js  c++  java
  • 回文序列

    题目描述

    如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:
    {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),以空格分隔。

    输出描述:

    输出一个数,表示最少需要的转换次数
    示例1

    输入

    4 1 1 1 3

    输出

    2

     1 import java.util.LinkedList;
     2 import java.util.Scanner;
     3 
     4 /**
     5  * 回文数 求 最少操作步数
     6  * 从两边对比 不行等和里边的数操作替换,相等就过 继续比较里边的数  直到 i 过半 
     7  * @author Dell
     8  *
     9  */
    10 public class Main {
    11     
    12 public static void main(String[] args) {
    13     Scanner sc = new Scanner(System.in);
    14     int n = sc.nextInt();
    15     LinkedList<Integer> list = new LinkedList<Integer>();
    16     for (int i = 0; i < n; i++) {
    17         list.add(sc.nextInt());
    18     }
    19     int step = 0;
    20     int i =0; 
    21     while(i<=(list.size()/2)) {
    22         int j = list.size()-1-i;
    23         if (list.get(i)<list.get(j)) {
    24             list.set(i,list.get(i)+list.get(i+1));
    25             list.remove(i+1);
    26             step++;
    27         }else if (list.get(i)>list.get(j)) {
    28             list.set(j,list.get(j)+list.get(j-1));
    29             list.remove(j-1);
    30             step++;
    31         }else {
    32             i++;
    33         }
    34     }
    35     System.out.println(step);
    36 }
    37 }
  • 相关阅读:
    使用Session防止表单重复提交
    Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结
    Eclipse 设置文件的默认打开方式
    使用maven创建web项目
    solr配置中文分词器——(十二)
    solr后台界面介绍——(十一)
    solr4.10.3部署到tomcat——(十)
    Java与计算机常识
    solr简介——(九)
    Redis简介——(一)
  • 原文地址:https://www.cnblogs.com/the-wang/p/8979478.html
Copyright © 2011-2022 走看看