思路分析
代码实现和步骤分析
代码优化
思路分析:
首先是对于这道题目的思路分析,先看输入描述,是根据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们能写出更加简洁的代码。