需要帮助。
有这样一个题目
输入一个数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;
}
[解决办法]
迭代器这里操作有误,改了,你参考一下:
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);}
[解决办法]
连续出错......汗颜
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); }}