国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

實戰編程-回文序列

2019-11-06 08:21:08
字體:
來源:轉載
供稿:網友

編程要求

如果一個數字序列逆置之后跟原序列是一樣的就稱這樣的數字序列為回文序列。例如: {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),以空格分隔。

輸出描述:

輸出一個數,表示最少需要的轉換次數

輸入例子:

4 1 1 1 3

輸出例子:

2

import java.util.Scanner;public class Main { static int count = 0; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int length = scanner.nextInt(); int[] array = new int[length]; for (int i = 0; i < array.length; i++) { array[i] = scanner.nextInt(); } add(array); System.out.PRintln(count); } public static void add(int[] array) { int length = array.length; int head = array[0]; int foot = array[length - 1]; if (head == foot) { if (!check(array)) { int[] arr = new int[length - 2]; for (int i = 0; i < arr.length; i++) { arr[i] = array[i + 1]; } add(arr); } } else { count++; int[] arr = new int[length - 1]; if (head > foot) { for (int i = 0; i < arr.length; i++) { arr[i] = array[i]; if (i == length - 2) arr[i] += array[i + 1]; } } else { for (int i = 0; i < arr.length; i++) { arr[i] = array[i+1]; if (i == 0) arr[i] += array[i]; } } add(arr); } } public static boolean check(int[] array) { int length = array.length; int half = length / 2; for (int i = 0; i < half; i++) { if (array[i] != array[length - i - 1]) { return false; } } return true; }}

check方法用于檢測數組是否符合回文序列的規則,把數組從中間分開,然后頭尾比較,如果全部相等,就說明符合回文序列的規則。

回文序列的可以簡單能理解為頭尾相等,根據編程要求,把兩個相鄰的數值相加放回原位,操作多次,使得數組符合回文序列。 我們只要判斷頭尾是否相等,就能知道是否執行相加操作,如果相等我們可以掐頭去尾以后再進行比較,直到滿足要求。 如果頭尾不相等,我們就需要進行相加操作,那是從頭部開始加呢,還是從尾部開始加呢,就要比較兩個數字的大小,哪邊小就從哪邊進行相加操作,這樣才可能和大的一方相等,如果對大的一方進行相加操作,則永遠不會等于小的一方,就會導致計算結果有誤。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 子长县| 金山区| 五河县| 满洲里市| 柘城县| 德化县| 黎平县| 扬州市| 龙山县| 铜川市| 曲麻莱县| 三河市| 长海县| 襄城县| 青阳县| 天镇县| 同德县| 旺苍县| 永德县| 安国市| 汉川市| 乌苏市| 炉霍县| 赞皇县| 昆山市| 庐江县| 原阳县| 仁寿县| 贵德县| 曲水县| 廊坊市| 栾城县| 奉节县| 吉首市| 乐平市| 开远市| 徐水县| 沽源县| 恩施市| 固始县| 高青县|