程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> NBOJ 1181 Big Mouth of Abyss - KogMaw

NBOJ 1181 Big Mouth of Abyss - KogMaw

編輯:C++入門知識

題意:前面說了一堆廢話,就是說給你一個字符串,全部由數字組成,讓你在裡面刪除n個數,最後得到的數越小越好。
思路:此題和NYOJ上的一道題基本上一樣,不過NYOJ上讓求得是最大數,這裡求的是最小數。思路一樣,嚴格來說,這道題數據有點水了,主要是字符串太長,數據變態點的話,我的方法可能會tle。我的思路是不斷的選出最小數,選的范圍一直改變。具體來說,設pos=0,最後剩下的數的長度為len,字符串的長度為Len,則第一次篩選的范圍是從pos到Len-len+1,在這之間選出一個最小的數,並且是pos的值等於這個最小數的位置,len--。這樣循環操作,最後找出即可。
代碼:
[cpp] 
#include <iostream> 
#include <cstdio> 
#include <string.h> 
#include <string> 
using namespace std; 
 
const int N = 120005; 
int main(){ 
    //freopen("1.txt","r",stdin); 
    string ss; 
    while(cin>>ss){ 
      int k; 
      scanf("%d",&k); 
      int len = ss.size(); 
      int pos = 0,leftlen = len - k,num[N],cnt = 0; 
      while(leftlen > 0){ 
          int mmin = 100; 
          for(int i = pos;i < len-leftlen+1;++i){ 
              if((int)(ss[i]-'0') < mmin){ 
                mmin = (int)(ss[i]-'0'); 
                pos = i; 
              } 
          } 
          leftlen--; 
          pos++; 
          num[cnt++] = mmin; 
      } 
      int kk; 
      for(int i = 0;i < cnt;++i){ 
          if(num[cnt]){ 
            kk = i; 
            break; 
          } 
      } 
      for(int i = kk;i < cnt;++i) 
          printf("%d",num[i]); 
      printf("\n"); 
    } 
    return 0; 

作者:wmn_wmn

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved