华师一附中OI组

标题: P1106 删数问题 [打印本页]

作者: 倚窗倾听风吹雨    时间: 2018-8-20 11:51
标题: P1106 删数问题
https://www.luogu.org/problemnew/show/P1106#sub

输入一个正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。输出去掉数字后组成的新的正整数。(N不超过240位)
输入:
输入文件有两行,分别为N和S(S<=N的长度)。
输出:
输出文件仅有一行,为去掉数字后得到的新数。
输入输出举例:
输入  987654321 5
输出  4321


作者: 倚窗倾听风吹雨    时间: 2018-8-20 11:51
  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. string s;
  5. int n,del,lens,i;
  6. int main()
  7. {
  8. //        freopen("del.in","r",stdin);
  9. //        freopen("del.out","w",stdout);
  10.     cin>>s;
  11.     cin>>n;
  12.     lens=s.size();
  13.     while(del<n)
  14.     {
  15.         for(i=0;i<lens;i++)
  16.             {
  17.                     if(s[i]>s[i+1])
  18.                     {
  19.                     ///        cout<<s[i]<<" "<<i<<" ";
  20.                             lens--;
  21.                             for(int j=i;j<lens;j++)
  22.                             s[j]=s[j+1];
  23.                 //        for(int j=0;j<lens;j++)
  24.             //        cout<<s[j];
  25.              //        cout<<endl;
  26.                             del++;
  27.                             break;
  28.                 }
  29.             }
  30.             if(i>=lens)break;
  31.     }
  32.     lens=lens-(n-del);
  33.     i=0;
  34.     while(s[i]=='0')
  35.     if((lens-i)>1)i++;
  36.     else break;
  37.     for(i=i;i<lens;i++)
  38.     cout<<s[i];
  39. //   fclose(stdin);
  40. //        fclose(stdout);
  41.     return 0;
  42. }
复制代码





欢迎光临 华师一附中OI组 (http://hsyit.cn/) Powered by Discuz! X3.2