题目大意:给出n个字符串,字符串要满足有大写字母,小写字母,数字才能构成密码,
要求以最小改动把字符串变为密码字符串
vector写法
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define pb push_back const int maxn = 1e6 + 7; int main(){ int t; cin >> t; std::vector<int> v[3]; char s[10010]; while(t--){ cin >> s; for(int i = 0; i < 3; i++) v[i].clear(); int len = strlen(s); for(int i = 0; i < len ; i++){ if(s[i] >= 'A' && s[i] <= 'Z'){ v[0].push_back(i); } else if(s[i] >= 'a' && s[i] <= 'z'){ v[1].pb(i); } else if(s[i] >= '0' && s[i] <= '9'){ v[2].pb(i); } } bool flag = 0; for(int i = 0; i < 3; i++){ if(!v[i].size()){ flag = 1; break; } } if(!flag)cout <<s << endl; else { if(!v[0].size()){ for(int i = 0; i < 3; i++){ if(i == 0) continue; if(v[i].size()>1) { s[v[i][v[i].size()-1]]='A'; v[i].pop_back(); break; } } } if(!v[1].size()) { for(int i=0; i<3; i++) { if(i==1)continue; if(v[i].size()>1) { s[v[i][v[i].size()-1]]='a'; v[i].pop_back(); break; } } } if(!v[2].size()) { for(int i=0; i<3; i++) { if(i==2)continue; if(v[i].size()>1) { s[v[i][v[i].size()-1]]='1'; v[i].pop_back(); break; } } }cout <<s << endl; } } return 0; } #include <bits/stdc++.h> using namespace std; int main(){ string s; int t; cin >> t; while(t--){ cin >> s; int ans1 = 0, ans2 = 0, ans3 = 0; for(int i = 0; i < s.size(); i++){ if(s[i] >= '0' && s[i] <= '9') ans1++; if(s[i] >= 'a' & s[i] <= 'z') ans2++; if(s[i] >= 'A' && s[i] <= 'Z') ans3++; } if(ans1 == 0){ if(ans2 > 1){ for(int i = 0; i < s.size(); i++){ s[i] = '1'; break; } ans2--; }else if(ans3 > 1){ for(int i = 0; i < s.size(); i++){ s[i] = '1'; break; } ans3--; } } if(ans2 == 0){ if(ans1 > 1){ for(int i = 0; i < s.size(); i++){ s[i] = 'a'; break; } ans1--; }else if(ans3 > 1){ for(int i = 0; i < s.size(); i++){ s[i] = 'a'; break; } ans3--; } } if(ans3 == 0){ if(ans1 > 1){ for(int i = 0; i < s.size(); i++){ s[i] = 'A'; break; } ans1--; }else if(ans2 > 1){ for(int i = 0; i < s.size(); i++){ s[i] = 'A'; break; } ans2--; } } cout << s << endl; } return 0; }