【测试点分析】1067 试密码 (20分)_20行代码AC
立志用更少的代碼做更高效的表達
Pat乙級最優化代碼+題解+分析匯總——>傳送門
當你試圖登錄某個系統卻忘了密碼時,系統一般只會允許你嘗試有限多次,當超出允許次數時,賬號就會被鎖死。本題就請你實現這個小功能。
輸入格式:
輸入在第一行給出一個密碼(長度不超過 20 的、不包含空格、Tab、回車的非空字符串)和一個正整數 N(≤ 10),分別是正確的密碼和系統允許嘗試的次數。隨后每行給出一個以回車結束的非空字符串,是用戶嘗試輸入的密碼。輸入保證至少有一次嘗試。當讀到一行只有單個 # 字符時,輸入結束,并且這一行不是用戶的輸入。
輸出格式:
對用戶的每個輸入,如果是正確的密碼且嘗試次數不超過 N,則在一行中輸出 Welcome in,并結束程序;如果是錯誤的,則在一行中按格式輸出 Wrong password: 用戶輸入的錯誤密碼;當錯誤嘗試達到 N 次時,再輸出一行 Account locked,并結束程序。
輸入樣例 1:
Correct%pw 3
correct%pw
Correct@PW
whatisthepassword!
Correct%pw
#
輸出樣例 1:
Wrong password: correct%pw
Wrong password: Correct@PW
Wrong password: whatisthepassword!
Account locked
輸入樣例 2:
cool@gplt 3
coolman@gplt
coollady@gplt
cool@gplt
try again
#
輸出樣例 2:
Wrong password: coolman@gplt
Wrong password: coollady@gplt
Welcome in
關于測試點2和測試點5
題中只說正確的密碼不包含空格、TAB等特殊符號, 但沒說輸入的密碼中沒有。
在樣例2中已經有了提示,一個輸入的密碼為try again。對于這種字符串, 只能用getline處理輸入, 這也是PAT題特有的一個坑點。
代碼
#include<bits/stdc++.h> using namespace std; int main() {string pass; int n; cin >> pass >> n;string input;int num = 0; getchar();while(getline(cin, input) && input!="#") {if(input != pass) cout << "Wrong password: " << input << '\n';else {cout << "Welcome in" << '\n'; break;}if(++num >= n) {cout << "Account locked" << '\n'; break;} }return 0; }耗時
每日一句
要活成兩種樣子,發光和不發光。不發光的時候,都是在為發光做準備~
總結
以上是生活随笔為你收集整理的【测试点分析】1067 试密码 (20分)_20行代码AC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【最简便解法】1066 图像过滤 (15
- 下一篇: 【已解决】[Error] referen