题目:删数问题

题目描述

给定一个正整数(<=255位),从中删去n位后,使得剩下的数字组成的新数最小。

输入格式

第一行,要处理的正整数
第二行,一个整数n (n<255)

输出格式

仅一行,组成的最小的新数

代码实现:—————————————————————————————————————————————————

#include<iostream>
using namespace std;

int a[257],n,l;

void dfs(int i){
     int j;
     for(j=i+1;j<=l;j++)
     if(a[j]!=-1) break;
     if(a[j]>=a[i]) dfs(j);
     else {a[i]=-1;return ;}
     }

int main()
{
    char s[257];int i,j;
    cin>>s;
    cin>>n;
    l=strlen(s);
    l--;
    for(i=0;i<=l;i++)
    a[i+1]=s[i]-'0';
    
    l++; 
    while(n>0)
    {
    for(i=1;i<=l;i++)
    if(a[i]!=-1&&a[i]!=0) break;
    dfs(i);
    n--;    
    }
   
    int w=0,k=0;
    for(i=1;i<=l;i++)
    if(a[i]==0) w++;
    else if(a[i]==-1) k++;
    if(w+k==l) {cout<<0<<endl;system("pause");return 0;}
   
    for(i=1;i<=l;i++)
    if(a[i]!=-1&&a[i]!=0) break;

    for(i;i<=l;i++)
    if(a[i]!=-1) cout<<a[i];
    cout<<endl;
    system("pause");
    return 0;
   
    }

原文地址:https://www.cnblogs.com/noip/p/2300656.html