You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GFG平台Geek and New job密码校验题提交Wrong Answer求助

GFG平台「Geek and New job」题目WA排查

问题表现

  • 提交代码后平台返回Wrong Answer
  • 自定义测试用例运行结果符合预期,平台未返回具体错误日志,无法定位问题

题目规则

给定一个字符串,判定是否为有效密码,有效密码需同时满足3个条件:

  • 至少包含1个大写英文字母
  • 至少包含1个小写英文字母
  • 至少包含1个数字字符
    满足所有条件输出YES,否则输出NO

约束条件

  • 测试用例数量T范围:1<=T<=10^4
  • 单个字符串长度范围:1<=|S|<=4*10^5
  • 所有测试用例字符串总长度不超过4*10^5

原提交代码

#code
testcases=int(input())
while testcases!=0:
    s=input()
    lower,upper,numeric=0,0,0
    
    for i in s:
        if ord(i)>=49 and ord(i)<=57:
            numeric+=1
        elif ord(i)>=65 and ord(i)<=90:
            upper+=1
        
        elif ord(i)>=97 and ord(i)<=122:
            lower+=1
    
    if(upper>=1 and lower>=1 and numeric>=1):
        print("YES")
    else:
        print("NO")
    testcases-=1

错误原因

数字判定的ASCII码范围写错:

  • 数字字符0对应的ASCII码值为48,原代码数字判断的下界设为49,直接漏掉了对0的识别
  • 只要测试用例中的密码仅包含数字0、没有1-9范围内的其他数字,原代码就会误判为密码不含数字,返回错误的NO结果。自定义测试时如果没覆盖到含0的用例,就会出现本地过、提交WA的情况。

修正方案

将数字判断条件的下界从49改为48即可,修正后代码如下:

testcases=int(input())
while testcases!=0:
    s=input()
    lower,upper,numeric=0,0,0
    
    for i in s:
        # 修正数字范围,包含ASCII码48对应的字符'0'
        if ord(i)>=48 and ord(i)<=57:
            numeric+=1
        elif ord(i)>=65 and ord(i)<=90:
            upper+=1
        elif ord(i)>=97 and ord(i)<=122:
            lower+=1
    
    print("YES" if upper and lower and numeric else "NO")
    testcases-=1

小优化:三个标记位都置1后可以直接跳出当前字符串的遍历,减少不必要的计算,不过原写法在题目给定的长度约束下也不会触发超时。

内容的提问来源于stack exchange,提问作者ARINDAM MANDAL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:12:20