zoukankan      html  css  js  c++  java
  • 【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 }

    输入输出:

    ???花式疑惑

     
  • 相关阅读:
    数独高阶技巧入门之六——ALS
    数独高阶技巧入门之七——AIC & Nice Loop
    数独-链的理解顺序
    数独高阶技巧入门之三——Fish
    数独·唯一性技巧(Uniqueness)-2
    游戏剧本从入门到放弃
    Electron和NW.js入门笔记
    Spring boot Access-Control-Allow-Origin 问题解决
    Materialize -- 基于Material Design的主流前端响应式框架
    Ubuntu 安装 nvm
  • 原文地址:https://www.cnblogs.com/TFLSc1908lzs/p/13527300.html
Copyright © 2011-2022 走看看