P1067 试密码
P1067 试密码
转跳点:
1067 试密码 (20分)
当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死。本题就请你实现这个小功能。
输入格式:
输入在第一行给出一个密码(长度不超过 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一直没过,3个小时就一直在debug,太狗了……
第一个坑点(最坑的地方): 第一行给出的密码和数字后面不一定紧跟换行符就这一点就把我坑惨了一定要注意
第二个坑点:用户输入没有任何限制,没错,测试点毛限制都没有,可能会有空格,可能不止20个字符,可能……(就像我们当初用软件瞎搞的时候,真是风水轮流转)
有个麻烦的地方就是输入与正确密码的比较如果存储成字符数组的话每一次比较都需要,而且个人不太擅长处理字符串,所以我把密码按ASCII码给加起来了,每次输入的字符都加起来,然后和密码的大小相比,这样子可以避免坑点二2 输入字符过长的问题,就算按输入100个127也就12700。不过很显然这种思路是有问题的ab和ba就没有办法识别,但是把,在PAT上居然A了……我没有管用户多余的输入(好吧这不太好)
我第一次AC的代码(无法识别ab 和ba的区别):
#include <stdio.h>
#include <stdlib.h> int PasswordSum(int mode); char Word[23] = "\0"; int main(void)
{
char ch;
int n, i, Password, sum = 0; Password = PasswordSum(0); scanf("%d", &n);
getchar(); for (i = 0; i < n; i++)
{
sum = PasswordSum(1);
if (((int)'#') == sum)
{
break;
}
if (sum == Password)
{
printf("Welcome in\n");
break;
}
printf("Wrong password: %s\n", Word);
} if (i == n)
{
printf("Account locked");
} return 0;
} int PasswordSum(int mode)
{
char ch, BKCh;
int i = 0, sum = 0; BKCh = 1 == mode ? '\n' : ' '; while (BKCh != (ch = getchar()))
{
sum += ch - '\0';
Word[i++] = ch;
}
Word[i] = '\0'; return sum;
}
第二次AC代码:
这次用了点正则,大部分使用了内置函数库我每次只读20个字符或者读到换行,达到这样的目的,使用了scanf("%20[^\n]"),[^...]能够读取到^后边的字符,而不是%s读到空白字符。 如果用户还有输入,再一个个读取字符,一直输出到换行,这样保证了程序的健壮性。
#include <ctype.h>
#include <stdio.h>
#include <string.h> int main()
{
int n;
char ch, Password[21], user[21]; scanf("%s %d", Password, &n);
while (getchar() != '\n')
;
while (n--)
{
scanf("%20[^\n]", user);
ch = ungetc(getchar(), stdin);
if (!strcmp(user, "#") && ch == '\n')
{
break;
}
else if (!strcmp(Password, user) && ch == '\n')
{
puts("Welcome in");
break;
}
else
{
printf("Wrong password: %s", user);
while (putchar(getchar()) != '\n')
;
if (0 == n)
{
puts("Account locked");
}
}
} return 0;
}
PTA不易,诸君共勉!
P1067 试密码的更多相关文章
- PAT 乙级 1067 试密码(20 分)
1067 试密码(20 分) 当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码(长度 ...
- PAT 1067 试密码(20)(代码)
1067 试密码(20 分) 当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码(长度 ...
- PAT(B) 1067 试密码(Java)
题目链接:1067 试密码 (20 point(s)) 题目描述 当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格 ...
- PAT1067 试密码 (20分)——测试点4分析 一个易错点
1067 试密码 (20分) 当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码( ...
- PAT 1067 试密码
https://pintia.cn/problem-sets/994805260223102976/problems/994805266007048192 当你试图登录某个系统却忘了密码时,系统一般只 ...
- PAT 1067. 试密码(20)
当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码(长度不超过20的.不包含空格.Ta ...
- PAT - 1067 试密码 (20 分)
当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码(长度不超过 20 的.不包含空格. ...
- PAT Basic 1067 试密码 (20 分)
当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码(长度不超过 20 的.不包含空格. ...
- 1067 试密码 (20分)C语言
当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码(长度不超过 20 的.不包含空格. ...
随机推荐
- Android Studio中 安卓模拟器 联网
方案一:之前做测试的时候发现虚拟机无法联网(浏览器打开 www.baidu.com, 显示 403 forbidden): 解决方案:关闭已经打开的虚拟机,进入到 SDK 安装目录下,按住 shift ...
- Interesting丨当我们用蚂蚁的视角看待世界
分享一组很有意思的图片~
- GSS系列题解——最大子段和系列
开坑啦! 2019 3/28 以前一直不知道怎么搞最大子段和,如今终于可以学习,其实真的很简单啊. 2019 3/29 树链剖分上最大子段和也OK啦 前置技能:线段树 题目大意:询问区间[l,r]的最 ...
- 2.2 logistic回归
logistic回归,是一个学习算法,用在监督学习问题中, 输出标签y是0或者1的时候,这是一个二元分类问题, 给定一个输入x,一张图,你希望识别出这是不是猫图, 需要一个算法,可以给出一个预测值,我 ...
- SQL的四种连接(内连接,外连接)
一,内连接(inner join) 内连接(INNER JOIN):分显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行.(所谓的连接表就是数据库在做查询形成的中间表). 1.隐式的内连接 没 ...
- scp 常用命令总结
1, 上传本地文件到服务器:scp /path/local_filename username@servername:/path 例如:例如scp /var/www/test.php codingl ...
- Windows 10 20H1版名称被定为Windows 10 Version 2004版以示区分
导读 我们知道Windows 10 20H1 版目前的开发工作已经接近完成,当前微软主要通过新版本来修复部分已知的问题. 而名称上面按照以往规律推算应该是 Windows 10 Version 200 ...
- windows下svn post-commit的实现
前言: 好的!在结束了上一博客教程的Subversion安装之后.我们开始了下一项工作,windows版本下 svn post-commit的实现.说实话,这方面的知识网上的知识并不是很多~~~~~~ ...
- 从七牛服务下载PDF文件
/** * 从七牛下载PDF文件 * @param request * @param response * @param exhiId * @throws MalformedURLException ...
- overlay rate
1.导入nii.img文件,三维矩阵 2.模版矩阵和网络矩阵对应位置元素相乘 .* 3.生成位置为0的新矩阵 cc=(nii_new==0); 4.两个矩阵的非零元素个数 t1=length(ni ...