• 【TFLSnoi李志帅】第三篇文章---问题记录


    P1106 删数问题

    提交48.03k
    通过12.27k
    时间限制1.00s
    内存限制125.00MB

    标签

     
     查看算法标签
    进入讨论版

    相关讨论

     查看讨论

    推荐题目

     查看推荐
     洛谷推荐
     展开

    题目描述

    键盘输入一个高精度的正整数NN(不超过250250位) ,去掉其中任意kk个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的NN和kk,寻找一种方案使得剩下的数字组成的新数最小。

    输入格式

    nn (高精度的正整数)

    kk(需要删除的数字个数)

    输出格式

    最后剩下的最小数。

    输入输出样例

    输入 #1
    175438 
    4
    
    输出 #1
    13


    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    分析
    本题属于贪心,其算法思想是每一个局部问题都要得出最优解,从而得到全局最优解

    老师代码:
     1  #include<bits/stdc++.h>
     2   using namespace std;
     3   char n[250];
     4   int s;
     5   int main()
     6   {
     7       cin>>n>>s;
     8       int len=strlen(n);              //获取字符数组的长度 
     9      while(s--){
    10          for(int i=0; i<len; i++)
    11              if(n[i]>n[i+1]){        //出现降序数字直间删掉 
    12                  for(int j=i; j<len; j++){
    13                      n[j]=n[j+1];
    14                  } 
    15                  break;
    16              }
    17          len--;                      //删掉后字符长度减一 
    18      }
    19      
    20      //注意以下两种情况的特判 
    21      while(n[0]=='0'){   //删除若干字符后,可能会出现字符串首有若干0如:10002344  2 
    22          for(int j=0; j<len; j++)
    23              n[j]=n[j+1];
    24          len--;
    25      }
    26          
    27      if(strlen(n)==0)cout<<0;   //所有数字都被删除完了  如输入 1234  4 
    28      else cout<<n;        
    29      
    30      return 0;
    31   } 

    输入输出:

    ————————————————————————————————————————————————————————————————————————

    我的代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     char a[300];
     6     int s,k;
     7     cin>>a>>k;
     8     s=strlen(a);
     9     while(k--)
    10     {
    11         for(int i=0;i<s;i++)
    12             if(a[i]>a[i+1])
    13             {
    14                 for(int j=i;j<s;j++)
    15                 a[i]=a[i+1];
    16                 break;
    17             }        
    18         s--;
    19     }
    20     while(a[0]=='0')
    21     {
    22         for(int j=0;j<s;j++)a[j]=a[j+1];
    23         s--;
    24     }
    25     if(s<1)cout<<"0";
    26     else 
    27     for(int i=0;i<s;i++)cout<<a[i];
    28     return 0;
    29 }

    输入输出:

    ???花式疑惑

     
  • 相关阅读:
    初窥Opencv
    24课时VC之思考>编辑控件
    24课时VC之思考>列表框与组合框
    递归归并排序 思想 JAVA实现
    插入排序 思想 JAVA实现
    AJAX发送json,SpringMVC 接收JSON,@RequestBody
    SpringBoot设置默认启动页的2种方式
    选择排序 思想 JAVA实现
    快速排序(一) 思想 JAVA实现
    spring security之logoutHandler中的CookieClearingLogoutHandler
  • 原文地址:https://www.cnblogs.com/TFLSc1908lzs/p/13527300.html
Copyright © 2020-2023  润新知