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 展开
自己写了代码:
#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 展开
1个回答
展开全部
感觉这代码的思路不太对,基本重写了一个:
#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;
}
#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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询