题目简介:
当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死。本题就请你实现这个小功能。
输入格式:
输入在第一行给出一个密码(长度不超过 20 的、不包含空格、Tab、回车的非空字符串)和一个正整数 N(≤ 10),分别是正确的密码和系统允许尝试的次数。随后每行给出一个以回车结束的非空字符串,是用户尝试输入的密码。输入保证至少有一次尝试。当读到一行只有单个 # 字符时,输入结束,并且这一行不是用户的输入。
输出格式:
对用户的每个输入,如果是正确的密码且尝试次数不超过 N,则在一行中输出 Welcome in
,并结束程序;如果是错误的,则在一行中按格式输出 Wrong password: 用户输入的错误密码
;当错误尝试达到 N 次时,再输出一行 Account locked
,并结束程序。
输入样例 1:
1 2 3 4 5 6
| Correct%pw 3 correct%pw Correct@PW whatisthepassword! Correct%pw #
|
输出样例 1:
1 2 3 4
| Wrong password: correct%pw Wrong password: Correct@PW Wrong password: whatisthepassword! Account locked
|
输入样例 2:
1 2 3 4 5 6
| cool@gplt 3 coolman@gplt coollady@gplt cool@gplt try again #
|
输出样例 2:
1 2 3
| Wrong password: coolman@gplt Wrong password: coollady@gplt Welcome in
|
思路:
这题主要的点在于尝试密码时,可能会输入中间有空格的密码,所以需要用getline()
来读入尝试的密码。
tip:
- 在使用
getline()
读入第一个尝试密码前,先用getchar()
读掉回车
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #include <iostream> #include <string> #include <vector> #include <algorithm> #include <unordered_map> #include <cmath> #include <iomanip> #include <set>
using namespace std;
int main() { string password; cin >> password;
int N; cin >> N;
getchar();
string try_str; getline(cin, try_str); int time = 1; while (true) {
if (try_str == "#") return 0;
if (try_str == password && time <= N) {
cout << "Welcome in"; return 0; }
if (try_str != password && time < N) {
cout << "Wrong password: " << try_str; }
if (try_str != password && time == N) {
cout << "Wrong password: " << try_str << endl; cout << "Account locked";
return 0; }
time++;
cout << endl; getline(cin, try_str); } }
|