需要帮助。

呼啸 2012-04-18 04:55:55
有这样一个题目
输入一个数N,然后再输入一个精度为N的整数,从这个数当中任意去除K个数,则剩下的数字组成的新数最小,例如:
N=5,输入精度为5的整数位89567,K=2;这新数应该为,567.


我的想法是从高位开始,碰到某个数比后面的数大,就把这个数去掉。代码如下,在运行程序时,系统报错,终止程序,请帮忙看看。


#include<iostream>
#include<list>
using namespace std;
list<char> lic;
list<char>::iterator lt=lic.begin();
void dis()
{

for(list<char>::iterator li=lic.begin();li!=lic.end();++li)
{
//++lt;
if(*li>*(++li))
{
lt=--li;
lic.erase(lt);
break;
}

}

}
int main()
{
int N,K;
char T;
cout<<"请输入N:"<<endl;
cin>>N;
cout<<"请输入这个精度为N的数:"<<endl;
for(int i=0;i != N;++i)
{
cin>>T;
lic.push_back(T);
}
cout<<"请输入K"<<endl;
cin>>K;

if(lic.size()==K)
{
cout<<"0"<<endl;
return 0;
}
for(int i=0;i<K;++i)
{
dis();
}
cout<<"新的最小数为:"<<endl;
for(lt=lic.begin();lt !=lic.end();++lt)
{
cout<<*lt;
}
cout<<endl;

return 0;
}

...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
呼啸 2012-04-18
  • 打赏
  • 举报
回复
谢谢大家,问题我已经解决,谢谢大家~
muyi66 2012-04-18
  • 打赏
  • 举报
回复
连续出错......汗颜

void dis()
{
list<char>::iterator li=lic.begin();
while(li!=lic.end())
{
lt=li++;
if (li!=lic.end())
{
if (*lt>*li)
{
lic.erase(lt);
break;
}
}
else
lic.erase(lt);
}
}
muyi66 2012-04-18
  • 打赏
  • 举报
回复
上面有错,更正如下:

void dis()
{
list<char>::iterator li=lic.begin();
while(li!=lic.end())
{
lt=li++;
if (*lt>*li)
{
lic.erase(lt);
break;
}
}
}
muyi66 2012-04-18
  • 打赏
  • 举报
回复
dis函数里迭代器推进太多了。另外没有考虑删除之后的回溯。
改成这样:

void dis()
{
list<char>::iterator li=lic.begin();
while(li!=lic.end())
{
lt=li++;
if (li!=lic.end())
if (*lt>*li)
{
if (lt!=lic.begin())
{
li=lt;
--li;
}
lic.erase(lt);
}
}
}
呼啸 2012-04-18
  • 打赏
  • 举报
回复
谢谢你的答复。~dis()函数,每次从高位开始,找到某个数比后面数大,删掉。而您的lic.erase()在for循环之后,删除的事整个数当中,最大的数。如果遍历完毕没有找到某个数比他后面的数小,应该删除最后的一个数,您的事删除了最第一个数。
hen_hao_ji 2012-04-18
  • 打赏
  • 举报
回复
迭代器这里操作有误,改了,你参考一下:

void dis()
{
list<char>::iterator max = lic.begin();
for(list<char>::iterator li=lic.begin();li!=lic.end();++li)
{
if(*li>*max)
{
max=li;
}
}
lic.erase(max);


}
hen_hao_ji 2012-04-18
  • 打赏
  • 举报
回复
程序没报错啊,只是结果不对。。

64,662

社区成员

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

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