您的位置:首页 > 其它

一个n位的数,去掉其中的k位,问怎样去使得留下来的(n-k)位数按原来的前后顺序组成的数最小

2014-03-06 10:56 411 查看
例如: 8314925去掉4个数,留下125最小,注意有前后顺序要求,要是没有顺序当然是123。
方法看图片,从前往后找,每次访问一位,比较该位前边的数,如果比该位大,果断干掉,可以使用栈来完成此操作



程序实现:

 

#include <iostream>
#include <ctime>

using namespace std;

int main()
{
int n,k;
cout<<"请输入位数n和k"<<endl;
cin>>n>>k;

//构造n位数
int *num = new int
;
srand(time(NULL));
for(int i=0; i<n; i++)
{
num[i] = rand()%10;
}

//输出n位数
cout<<"输出原数字"<<endl;
for(int i=0; i<n; i++)
{
cout<<num[i];
}
//对n位数进行操作
int *temp = new int
;
int rear=0,count=0;   //count表示去掉数的个数
temp[rear]= num[0];
int m=1;
for(; m<n && count<k; m++)
{
temp[++rear] = num[m];
while((rear>0) && (temp[rear] < temp[rear-1]) && (count<k))
{
temp[rear-1] = temp[rear];
count++;
rear--;
}
}

//cout<<m<<endl;
while(m<n)
{
temp[++rear] = num[m++];
}
//输出结果
cout<<endl<<"输出结果"<<endl;
for(int i=0; i<n-k; i++)
{
cout<<temp[i];
}
cout<<endl;
return 0;
}


更加详细的讲解请参考:http://www.cnblogs.com/kaituorensheng/p/3582857.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐