AcWing 1519. 密码
原题链接
简单
作者:
锦梨冲冲冲
,
2020-04-01 17:40:57
,
所有人可见
,
阅读 1054
(一)本题思路
①读入的时候需要判断每个密码是否需要修改,把所有需要修改的密码存下来。
②需要存的信息: 需要修改密码的同学的用户名、
修改后的密码是什么、
有多少个同学的密码被修改过了。
(二)为什么N要多出几个数?
e.g.题目要求十万,就要写成1e5+10. ( 1e5 = 1 × 10^5)
每次多加10个,防止溢出(边界问题)。
e.g.字符串以0结尾,1e5就要写成1e5+1
又要多开1个进行区分,为了不麻烦,以后统一多开10个。(一般多开5个就够了)
\0就是数值0,在指针中是Null,
在计算机存储中是数值0,就是0的asc码
(三)做题逻辑
①分析题
②写主函数
主函数中能写成函数的部分先写出函数头放在主函数上边
③处理输入输出
④返回上边完成函数逻辑
⑤复制样例数据,调试代码,直到可提交答案AC
闫式优美题解
#include <iostream>
using namespace std;
const int N = 1010;
string name[N], pwd[N];
string change(string str)
{
string res;
for (auto c : str)
if(c == '1') res += '@';
else if(c == '0') res += '%';
else if(c == 'l') res += 'L';
else if(c == 'O') res += 'o';
else res += c;
return res;
}
int main()
{
int n;
cin >> n;
int m = 0;
for(int i = 0; i < n; i ++ )//从前往后读入每个同学的信息
{
string cur_name, cur_pwd;
cin >> cur_name >> cur_pwd;//读入当前用户名和当前密码
//判断是否修改密码(判断和修改可同时放在一个函数中)→利用函数修改掉密码中所有有歧义的字符
string changed_pwd = change(cur_pwd);//求出更新后密码
if(changed_pwd != cur_pwd)//如果密码被修改了
{
name[m] = cur_name;
pwd[m] = changed_pwd;
m++;
}
}
// !m <=> m == 0
if(!m)//如果密码没被修改过
{
if(n == 1) puts("There is 1 account and no account is modified");
else printf("There are %d accounts and no account is modified\n", n);
}
else//密码被修改过,输出名字及密码
{
cout << m << endl;
for (int i = 0; i < m; i ++ ) cout << name[i] << ' ' << pwd[i] << endl;
}
return 0;
}