

DÃY CON NHỎ NHẤT
Cho một xâu S có chiều dài N (2≤N≤100) gồm các chữ số từ 1 đến 9 và một số nguyên dương k (k<N).
Yêu cầu: Hãy viết chương trình xóa k ký tự trong xâu S, để còn lại một xâu là số tự nhiên có giá trị nhỏ nhất.
Dữ liệu: Vào từ tệp văn bản DCNN.INP có cấu trúc gồm hai dòng:
Dòng thứ nhất chứa xâu S.
Dòng thứ hai chứa số tự nhiên k.
Kết quả: Ghi ra file văn bản DCNN.OUT là xâu số cần tìm.
Trang 2/3
Ví dụ:
DCNN.INP
DCNN.OUT
123456789
6
123
Ràng buộc:
- Có 40% test tương ứng 40% số điểm với (2≤N≤25);
- Có 30% test tương ứng 30% số điểm với (25≤N≤50);
- Có 30% test tương ứng 30% số điểm với (50≤N≤100).
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
tham khảo
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("DCNN.INP","r",stdin);
freopen("DCNN.OUT","w",stdout);
string s;
do cin>>s;
while(s.size()<2 || s.size()>100);
int k;
cin>>k;
string x="";
for(int i=0;i<s.size();i++){
char c=s[i];
while(x.size()>0 && k>0 && x.back()>c){
x.pop_back();
k--;
}
x.push_back(c);
}
while(k>0){
x.pop_back();
k--;
}
cout<<x;
}Hãy giúp mọi người biết câu trả lời này thế nào?
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("DCNN.INP","r",stdin);
freopen("DCNN.OUT","w",stdout);
string s;
do cin >> s;
while (s.size() < 2 && s.size() > 100);
int k;
cin >> k;
string h = "";
for(int i = 0; i < s.size();i++) {
char c = s[i];
while(h.size() > 0 && k >> 0 && h.back() > c) {
h.pop_back();
k--;
}
h.push_back(c);
}
while (k > 0){
h.pop_back();
k--;
}
cout << h;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin