求问怎么把数组改成手动输入,并按回车结束

牧殇之ZERO 2016-05-22 12:02:29
动态规划求一个最长降序子序列,我想把数组改成手动输入,可是怎么改都有错误。本人渣渣一枚,求大神改一改。

#include <iostream.h> 
#include <stdio.h>
#include <string.h>

void longest(int *a, int size)
{

int *d=new int[size]; //分配内存空间
int *p=new int[size]; //分配内存空间

d[size-1]=1;

for(int i=size-1;i>=0;i--)
{
int max=0;
int index=0;

for(int j=i;j<size;j++)
{
if(a[i]>a[j] && max <d[j])
{
max=d[j];
index=j;
}
}

if(max==0)
{
d[i]=1;
p[i]=-1;
}
else
{
d[i]=max+1;
p[i]=index;
}
}

//寻找最大子序列的起始下标

int max=0;
int max_index=0;

for( i=0;i<size;i++)
{
if(d[i]>max)
{
max=d[i];
max_index=i;
}
}

//从最大子序列的下标开始 输出子序列
cout<<"\n最长递减子序列的长度为:"<<d[max_index]<<",最长子序列为:"<<endl;

for( i=max_index;i!=-1;i=p[i])
{
cout<<a[i]<<" "<<ends;
}
delete [] d;
delete [] p;
}

void main()
{
int data[10]={1,2,5,4,3,2,7,8,9,0};
longest(data,10);
}
...全文
180 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-05-22
  • 打赏
  • 举报
回复
malloc,realloc,free
小灸舞 2016-05-22
  • 打赏
  • 举报
回复
有几个思路:
1.把数组开的大一点,比如20,根据输入的个数来确定传入longest的第二个参数

void main()
{
//int data[10]={1,2,5,4,3,2,7,8,9,0};
int data[20] = {0}, i = 0;
char ch = ' ';
while(ch != '\n')
{
cin >> data[i++];
ch = getchar();
}

longest(data,i);
}

2.先将输入的数都保存下来(比如vector),然后用new开辟空间(此时已经知道数组个数了),然后再将数存到new出来的数组里
3.让用户先输入数组的长度,然后直接new出对应长度的数组就行

64,659

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧