PAT(Advanced Level)1035 題要求處理用戶賬戶密碼中的視覺混淆字符:將 '1' 替換為 '@','0' 替換為 '%','l'(小寫 L)替換為 'L','O'(大寫 O)替換為 'o'。需統計修改過的賬戶數量並按輸入順序輸出修改後的信息;若無修改則輸出特定格式提示(注意單複數區分)。
#include <cstdio>
#include <vector>
#include <string>
using namespace std;
int main() {
int n;
char name[20], pass[20];
vector<string> modified; // 交替存儲:用戶名, 密碼, 用戶名, 密碼...
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%s%s", name, pass);
bool changed = false;
for (char* p = pass; *p; ++p) {
switch (*p) {
case '0': *p = '%'; changed = true; break;
case '1': *p = '@'; changed = true; break;
case 'l': *p = 'L'; changed = true; break;
case 'O': *p = 'o'; changed = true; break;
}
}
if (changed) {
modified.push_back(name);
modified.push_back(pass);
}
}
if (!modified.empty()) {
printf("%d\n", (int)modified.size() / 2);
for (size_t i = 0; i < modified.size(); i += 2) {
printf("%s %s\n", modified[i].c_str(), modified[i+1].c_str());
}
} else {
if (n == 1)
printf("There is 1 account and no account is modified\n");
else
printf("There are %d accounts and no account is modified\n", n);
}
return 0;
}