C++ 指针,数组,动态数组难题,求大神指点。

写一个函数,判断一个一维数组中,如果有回文的子数组,只要最大的那个回文子数组,输出这个最大的子数组的首位元素和末位元素的序号,如果原数组里没有回文子数组,输出-1.自己写... 写一个函数,判断一个一维数组中,如果有回文的子数组,只要最大的那个回文子数组,输出这个最大的子数组的首位元素和末位元素的序号,如果原数组里没有回文子数组,输出-1.
自己写了代码:

#include <iostream>
using namespace std;
void print_sub_pals(int *nums,int length)
{
if(length < 0)
{
return;
}
int n = 0;
for(int i = 0;i < length;i++)
{
if(*(nums + i) == *(nums + (length - 1 - i)))
{
n++;
int *a = new int[n];
for(int j = 0;j < n;j++)
{
a[j] = i;
int min = 0,max = 0;
min = max = a[0];
for(int j = 1;j <= n;j++)
{
if(min > a[j])
{
cout << min << endl;
}
if(max < a[j])
{
cout << max << endl;
}
}
}
}
else
{
cout << "-1" << endl;
}
}
}

#ifndef WEBSUBMIT
int main()
{
int length = 5;
int array[5] = {1,2,3,2,4};
int *nums;
nums = array;
print_sub_pals(nums, 5);
return 0;
}

输出结果为
-1
1
2
2
2
3
3
3
3
3
3
-1
展开
 我来答
yecange
推荐于2016-07-25 · 超过92用户采纳过TA的回答
知道小有建树答主
回答量:114
采纳率:88%
帮助的人:106万
展开全部
感觉这代码的思路不太对,基本重写了一个:

#include<iostream>
using namespace std;
int Plalin(int*p1, int*p2){
int num = p2 - p1;
while (p1 < p2){
if (*p1 == *p2){
p1++;
p2--;
}
else
return 0;
}
return num;
}
void print_sub_pals(int *nums, int length){
int n=0;
int max=0;
int num;
for (int i = 0; i < length - max - 1; i++)
for (int j = i + 1; j < length ; j++){
if (*(nums + i) == *(nums + j)){
num = Plalin(nums + i, nums + j);
if (max < num){
max = num;
n = i;
}
}
}
if (max == 0)
cout << -1 << endl;
else
cout << n << " " << n + max << endl;//输出的是下标
}
int main()
{
int array[6] = {1,3,3,1,3,3};
int *nums;
nums = array;
print_sub_pals(nums, 6);
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式