Educational Codeforces Round 51 (Rated for Div. 2) A. Vasya And Password(模拟)

题目大意:给出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;
}

猜你喜欢

转载自blog.csdn.net/qq_39475280/article/details/82919805