首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

需要帮助。解决办法

2012-04-22 
需要帮助。有这样一个题目输入一个数N,然后再输入一个精度为N的整数,从这个数当中任意去除K个数,则剩下的数

需要帮助。
有这样一个题目
输入一个数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;
}



[解决办法]
迭代器这里操作有误,改了,你参考一下:

C/C++ code
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);}
[解决办法]
连续出错......汗颜
C/C++ code
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);    }} 

热点排行