牛客OR141 密码检查

文章介绍了如何根据输入判断密码的合法性,涉及循环、ASCII码值判断以及代码优化。首先通过多组输入读取数据,然后检查密码首字符是否为数字,接着判断密码长度,最后在循环中确认密码仅包含数字和字母。不符合条件的情况会打印NO并跳过,所有条件满足则输出YES。代码优化主要减少了不必要的赋值操作,提高了效率。
摘要由CSDN通过智能技术生成
  1. 思路分析

  1. 代码实现和步骤分析

  1. 代码优化

思路分析:

首先是对于这道题目的思路分析,先看输入描述,是根据n来判断密码有多少行,所以肯定要运用到了循环,其次,根据要求,密码中只能出现大写、小写、数字。根据这点我们可以判断出应该要运用到ascii码值,创建char类型的数组运用ascii码值判断是否满足条件

代码实现:

步骤讲解:首先运用多组输入,利用scanf的返回值实现while循环

这里提一下~scanf(“%d”,&n)的原理,scanf成功读取后的返回值是输入的个数,在本题目的用法中,如果是正常输入返回的是1,如果异常则返回EOF,在vs也就是-1,而对-1进行整体取反就是0,则退出while循环

接着分析每一步,因为是n行,所以我们采用循环n次来实现,每次循环内创建一个数组arr

用来接收密码

接着直接判断密码第一位是否为数字,运用ascii码值来判断,如果是数字,直接打印NO,接着continue再次循环

第二步判断数组长度

这一步最为简单直接strlen判断,同理不满足打印NO再continue

第三步是整个代码中比较难想的地方吗,首先就是循环条件,arr[j]!='\0',因为我们要判断整个字符串,所以用‘\0’来停止。在循环内部,我们来实现要求3,也就是只有数字和字母,这里定义了三个变量count,count1,count2,如果大于0赋值为1,如果三个相加小于2则不满足条件,continue。

最后所有要求都满足则打印YES

代码优化:

主要是后半部分,将赋值为1的操作删除,直接改为判断是否为真,为真则为1这种形式,这样使代码简洁了点,然后为了要求三,直接再来一个else,如果有数字,字母以外情况出现,则++一下,最后判断是否为0即可。

这道题目就到此为止啦,希望uu们能写出更加简洁的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我真的很困1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值