WY26. 回文序列
描述
如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:输入描述
输入为两行,第一行为序列长度n ( 1 ≤ n ≤ 50) 第二行为序列中的n个整数item[i] (1 ≤ item[i] ≤ 1000),以空格分隔。输出描述
输出一个数,表示最少需要的转换次数示例1
输入:
4 1 1 1 3
输出:
2
说明:
经过第一次操作后,变为2 1 3,{2, 1, 3} 不是回文序列; 再经过一次操作后,变为3 3,{3, 3} 是回文序列; 所以共需要进行两次转换。C 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2020-08-27
#include<stdio.h> #include<string.h> int main(){ int n, i, count = 0; scanf("%d", &n); int num[n]; for(i = 0; i < n; i++){ scanf("%d", &num[i]); } int k, l; k = 0; l = n - 1; while(k < l){ if(num[k] == num[l]){ k ++; l --; }else if(num[k] < num[l]){ num[k + 1] = num[k] + num[k + 1]; ++k; ++count; }else{ num[l - 1] = num[l -1] + num[l]; --l; ++count; } } printf("%d", count); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 228KB, 提交时间: 2018-12-09
#include<stdio.h> #include<string.h> int main(){ int n, i, count = 0; scanf("%d", &n); int num[n]; for(i = 0; i < n; i++){ scanf("%d", &num[i]); } int k, l; k = 0; l = n - 1; while(k < l){ if(num[k] == num[l]){ k ++; l --; }else if(num[k] < num[l]){ num[k + 1] = num[k] + num[k + 1]; ++k; ++count; }else{ num[l - 1] = num[l -1] + num[l]; --l; ++count; } } printf("%d", count); return 0; }