华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 973|回复: 1
打印 上一主题 下一主题

P1106 删数问题

[复制链接]

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
跳转到指定楼层
楼主
发表于 2018-8-20 11:51:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
https://www.luogu.org/problemnew/show/P1106#sub

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

回复

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
沙发
 楼主| 发表于 2018-8-20 11:51:27 | 只看该作者
  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. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-2 02:21 , Processed in 0.278668 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表