MOOC清华《程序设计基础》第5章第1题:判断数列的对称性

来源:互联网 发布:内存卡数据恢复软件 编辑:程序博客网 时间:2024/05/21 22:25

题目描述

给定一个数组,判断其中的数据序列是否左右对称:偶数个数时,左右两半部分正好逆序;奇数时,除中间位置数外,左右逆序

输入格式

第一行N表示一共有N个测试用例,也即接下来的输入数据共有N行。

接下来的每一行表示一个输入数组,第一个数字n表示该数组的元素个数,后面紧跟着n个数,中间都以空格隔开

输出格式

是逆序输出YES,否则输出NO(注意都是大写,小写判错)

样例输入

35 1 2 3 2 14 1 1 1 26 2 1 2 2 1 2
样例输出

YESNOYES


#include <iostream>using namespace std;int main() {    int N = 1;    cin >> N;    int *length = new int[N]; //必须单独存放,这样在数据处理上就化难为易了    int **array = new int *[N];    for (int i = 0; i < N; i++) {        cin >> length[i];        array[i] = new int[length[i]];        for (int j = 0; j < length[i]; j++)            cin >> array[i][j];    }void Symmetry(int *a, int n);for(int i = 0; i < N; i++)Symmetry(array[i], length[i]);    for (int i = 0; i < N; i++)        delete[] array[i]; //注意释放二维数组的技巧,“深度释放内存”    delete[] array;    delete[] length;    return 0;}   void Symmetry(int *a, int n) { int middle, i, j; if(n % 2 == 0) { middle = n / 2; for(i = 0, j = n - 1; i <= middle - 1 && j >= middle; ) if(a[i] == a[j]) i++, j--; else {cout << "NO" << endl;break;} if(i - j == 1) //这个条件是关键cout << "YES" << endl;}else{middle = n / 2;for(i = 0, j = n - 1; i < middle && j > middle;)if(a[i] == a[j]) i++, j--;else {cout << "NO" << endl;break;}if(i - j == 0) //这个条件是关键cout << "YES" << endl;} }

测试结果:



阅读全文
0 0
原创粉丝点击