题目大意:给出n个字符串,字符串要满足有大写字母,小写字母,数字才能构成密码,要求以最小改动把字符串变为密码字符串
题目链接:http://codeforces.com/contest/1051/problem/A
思路:模拟
c++代码:
#include <iostream>
#include <vector>
using namespace std;
const int maxn=1e6;
vector <int> v[3];
int main() {
int T;
cin >> T;
string s;
while(T--) {
cin >> s;
for(int i=0;i<3;i++)v[i].clear();
for(int i=0;i<s.length();i++) {
if(s[i]>='A'&&s[i]<='Z') {
v[0].push_back(i);
}
else if(s[i]>='a'&&s[i]<='z') {
v[1].push_back(i);
}
else if(s[i]>='0'&&s[i]<='9') {
v[2].push_back(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;
}