题目链接:
https://pintia.cn/problem-sets/994805260223102976/problems/994805266007048192
我的代码(13分):
#include <bits/stdc++.h>
using namespace std;
string correct;
bool is_same_(string s){
for(int i=0;i<s.size()&&i<correct.size();i++){
if(s[i]!=correct[i])
return false;
}
return true;
}
int main(){
int N;
cin>>correct;
scanf("%d",&N);
getchar();
string str;
int num=1;
while(cin>>str&&str!="#"){
if(num>3){
printf("Account locked\n");
}
else{
if(is_same_(str)){
printf("Welcome in\n");
break;//密码输入成功,就结束循环即可
}
else {
cout<<"Wrong password: "<<str<<endl;
}
num++;
}
}
system("pause");
return 0;
}
AC代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s,str;
int N,sum=0,i;
cin>>s>>N;
getchar();//吸收回车
while(getline(cin,str)){
if(str=="#")exit(0);
for(i=0;i<s.size()&&sum<N;i++){
if(s[i]!=str[i]||s.size()!=str.size()){
cout<<"Wrong password: "<<str<<endl;
sum++;
break;
}
}
if(sum>=N){
cout<<"Account locked";
exit(0);
}
if(i==s.size()){
cout<<"Welcome in"<<endl;
exit(0);
}
}
return 0;
}
知识点:
1,关于exit():
(1),exit(1)表示异常退出
(2),exit(0)表示正常退出
(3),return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
(4),return是返回函数调用,如果返回的是main函数,则为退出程序
(5),exit是在调用处强行退出程序,运行一次程序就结束
2,一般要用getchar吸收空格,
二刷:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
string cor;
int m;
cin>>cor>>m;
getchar();
string str;
int i=0;
while(getline(cin,str),str!="#"){
i++;
if(str!=cor)//先判断密码是否正确,然后判断是否达到阈值
//不能先判断Account locked ,否则报错
cout<<"Wrong password: "<<str<<endl;
else{
cout<<"Welcome in";
break;
}
if(i>=m){
cout<<"Account locked";
break;
}
}
return 0;
}