首页 > 学院 > 开发设计 > 正文

洛谷 P1106 删数问题

2019-11-06 06:40:47
字体:
来源:转载
供稿:网友

主要思想:贪心

每一次都从前往后找 找到第一个数满足 它自己的后一位比前一位大的数 然后删去 因为对于一个位数已知的数来说 位数越靠前 对它值的大小影响越大 (这是可以有严格数学证明的)

//例1、删数问题(delete.cpp NOI94)//洛谷 P1106 删数问题 //2017.3.6#include <cstdio>#include <iostream>#include <string>#include <cstring>using namespace std;string s; //正整数S int n; //删去n个int p = 0;int main(){ cin >> s >> n; s.insert(s.length(), "0"); //在结尾加上一个0 以便比较// cout << s << endl; //去除前导0 while (s[0] == '0') s.erase(0, 1);// cout << s << endl; while(n){ n--; for (int i = 0; i < s.length(); i++){// cout << s[i] << " " << s[i + 1] << endl; if (s[i] > s[i + 1]){ s.erase(i, 1);// cout << s << endl; break; } } }// cout << s << endl; s.erase(s.length() - 1, 1); //去掉0// cout << s << endl; //去除前导0 while (s[0] == '0') s.erase(0, 1); cout << s; return 0;}

有点要注意: 1. “高精度的正整数”不用怕 字符串输入输出即可 2. 可以先在结尾加上一个0 以便比较 (最后勿忘删去) 3. 特别注意前导0 (大坑) 不论是一开始读入时 还是输出时 4. str.erase(pos, k) 删去字符串str中从pos位开始的k个数 P.s: 关于字符串的小操作


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表