算法问题

a97191 2005-12-27 11:58:18
n个数,已从小到大顺序排列,从主函数中键入一个值,调用一个函数,它把键入的数插到原有数列中,保存原有顺序,并将挤出最大的数(有只能是被插入数),返回给主函数输出
我自己编大家帮忙看那里错了
#include <iostream.h>
int maxNum(int[],int,int);
int temp,r;
void main()
{
int a[4]={2,4,6,8};
int b,c,len;
len=sizeof(a)/sizeof(int);
cout<<"please input a number";
cin>>b;
c=maxNum(a,len,b);
cout<<c<<endl;

for(int k=0;k<len;k++)
{
cout<<a[k]<<",";
}
cout<<endl;
}
int maxNum(int a[4],int size,int Num)
{
if(Num>a[size-1])
{
return Num;
}
else
{
for(int i=0;i<size;i++)
{
if(a[i]>Num)
{
temp=a[i];
a[i]=Num;
for(int j=i;j<size;j++)
{

r=a[j+1];
a[j+1]=temp;
temp=r;


}


}
return a[size-1];

}

}
}
...全文
112 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
vollin 2005-12-27
  • 打赏
  • 举报
回复
直接用一个vector,先n个sort一下就排好序了,
来一个插入一个,再sort一把,把最大的那个值取出并,并删除。
这样不就OK了,要学习使用stl啊,这么简单的题,要自己写算法太浪费了。除非是作业题。
useresu 2005-12-27
  • 打赏
  • 举报
回复
for(int j=i;j<size;j++)
{

r=a[j+1];
a[j+1]=temp;
temp=r;


}

这个循环就可以省掉了
useresu 2005-12-27
  • 打赏
  • 举报
回复
链表实现好一些

ouyh12345 2005-12-27
  • 打赏
  • 举报
回复
for(int j=i;j<size;j++)

应该改为for(int j=i+1;j<size;j++)
ouyh12345 2005-12-27
  • 打赏
  • 举报
回复
for(int j=i;j<size;j++)

你把a[size-1]冲掉了
在for之前把它保存
a97191 2005-12-27
  • 打赏
  • 举报
回复
To:iamcaicainiao(菜菜鸟)你的算法也有问题,返回值错误
iamcaicainiao 2005-12-27
  • 打赏
  • 举报
回复
楼主你的算法思想有问题。
这样改就行了。
int maxNum(int a[4],int size,int Num)
{
if(Num>a[size-1])
{
return Num;
}
else
{
for(int i=0;i<size;i++)
{
if(a[i]>Num)
{
for(int j=size-1; j>i; j--)
a[j]=a[j-1];
a[i] = Num;
return a[size-1];
}

}
}
}
EnginePlus 2005-12-27
  • 打赏
  • 举报
回复
这个不难啊。 用 C++stl 的vector list什么的都很方便啊 
先返回比你插入数小的数的位置,然后扔掉最后一个数字 再insert之

a97191 2005-12-27
  • 打赏
  • 举报
回复
不过,一样的,都没有显示插入

64,662

社区成员

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

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