水题使我快乐,发现只会写水题,以后再努力吧
#include <bits/stdc++.h> using namespace std; void printAns(string& s){ for (int i = s.length()-1; i >=0; i--) { if (s[i-1]>s[i]){ s[i-1]=s[i-1]-1; for (int j = i; j < s.length(); ++j) { s[j]='9'; } } } cout<<s.substr(s.find('0')+1)<<endl; } int main() { int t; string s; cin>>t; for (int p = 0; p < t; ++p) { cin>>s; cout<<"case #"<<p<<":"<<endl; if (s.length() == 1) cout<<s<<endl; else printAns(s); } return 0; }
case小写WA了四发真的服
这不是gcj的题吗?
我一看这道题说是个水题,就没有想最优解,直接暴力嘛。按照题意,从头往后比,看看有没有降下去的位,那就从这一位开始后面都置 9,前面退一位。退位的时候注意别小于 '0' 了,不然就不是数了。
'0'
#include <iostream> #include <string> using namespace std; void solve() { string str; cin >> str; for (int i = 1; i < str.size(); ++i) { while (str[i] < str[i - 1]) { for (int j = i; j < str.size(); ++j) str[j] = '9'; // 后面的置9。 while (--str[--i] < '0') str[i] = '9'; // 退位。 } } printf("%s\n", str.substr(str.find_first_not_of('0')).data()); } int main() { int t; cin >> t; for (int i = 0; i < t; ++i) { printf("case #%d:\n", i); solve(); } }
#include <bits/stdc++.h> using namespace std; void print_int(string n) { auto it = n.begin(); for (; *it == '0' && it <= n.end(); it++); string tmp(it, n.end()); cout << tmp << endl; } int main() { int T; string n; cin >> T; for (int i = 0; i < T; ++i) { cin >> n; if (n.length() == 1) { cout << "case #" << i << ":" << endl; cout << n << endl; continue; } for (auto it = n.begin() + 1; it < n.end(); it++) { if (*it < *(it - 1)) { // 逆向查找 auto it_r = it - 1; while (it_r != n.begin() && *(it_r - 1) == *it_r) { it_r--; } *it_r = *it_r - 1; it_r++; while (it_r != n.end()) { *it_r = '9'; it_r++; } break; } } cout << "case #" << i << ":" << endl; print_int(n); } return 0; }
#include <bits/stdc++.h> using namespace std; void solve(string &s) { for(int i=s.size()-2;i>=0;i--) { if(s[i]>s[i+1]) { for(int j=i+1;j<s.size();j++) s[j]='0'; for(int j=i;j<s.size();j++) { if(j==i) s[j]=s[j]-1; else s[j]='9'; } } } } int main() { int cas; cin>>cas; for(int i=0;i<cas;i++) { string s; cin>>s; printf("case #%d:\n",i); solve(s); bool ok=0; for(int i=0;i<s.size();i++) { if(s[i]!='0') ok=1; if(ok==1) cout<<s[i]; } cout<<endl; } return 0; }
水题使我快乐,发现只会写水题,以后再努力吧
case小写WA了四发真的服
这不是gcj的题吗?
我一看这道题说是个水题,就没有想最优解,直接暴力嘛。按照题意,从头往后比,看看有没有降下去的位,那就从这一位开始后面都置 9,前面退一位。退位的时候注意别小于
'0'
了,不然就不是数了。