B3843 [GESP202306 三级] 密码合规

Kobe_Bryan @ 2024-07-16 16:48:34

改了好久了,一直过不了

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string a;
    string b;
    bool n=true;
    int f=0;
    int dz=0,xz=0,sz=0,tz=0;
    cin>>a;
    int x=a.length();
    if(a[x-1]!=',') 
    a[x]=',';
    for(int i=0;i<=x;i++)
    {
        if(a[i]==',')
        {
            int Sum=0;
            for(int g=f;g<i;g++)
            {
                if(a[g]>='a'&&a[g]<='z')
                {
                    xz=1;
                    Sum++;
                }
                if(a[g]>='A'&&a[g]<='Z')
                {
                    dz=1;
                    Sum++;
                }
                if(a[g]>='0'&&a[g]<='9')
                {
                    sz=1;
                    Sum++;
                }
                if(a[g]=='!'||a[g]=='#'||a[g]=='@'||a[g]=='$')
                {   
                    tz=1;
                    Sum++;
                }   
            }
            if(i-f>=7&&i-f<=13&&Sum==i-f&&xz+dz+sz>=2&&tz==1)
            {
                for(int g=f;g<i;g++)cout<<a[g];
                cout<<endl;
            }
            f=i+1;
            i++;
        }
    }
    return 0; 
}

by Iron_grand @ 2024-07-16 17:21:57

是不是漏看了这个:

大写字母,小写字母和数字必须至少有其中两种,以及至少有四个特殊字符中的一个。


by Iron_grand @ 2024-07-16 17:47:15

不得不说,你这代码真烂QAQ


#include<bits/stdc++.h>
using namespace std;
string a;//原字符串 
string b="";//暂存字符串 
int use = true;//该字符串是否为有效字符串(全是有效字符) 
bool n=true;
int f=0;
int len=0;//字符串长度 
int dz=0,xz=0,sz=0,tz=0;//有效字符统计 
bool r(int g){//判断是否为有效字符 
                if(a[g]>='a'&&a[g]<='z')
                {
                    xz++;
                    return 1;
                }
                if(a[g]>='A'&&a[g]<='Z')
                {
                    dz++;
                    return 1;
                }
                if(a[g]>='0'&&a[g]<='9')
                {
                    sz++;
                    return 1;
                }
                if(a[g]=='!'||a[g]=='#'||a[g]=='@'||a[g]=='$')
                {   
                    tz++;
                    return 1;
                }   
            return 0;

}
//if(i-f>=7&&i-f<=13&&Sum==i-f&&xz+dz+sz>=2&&tz==1)
//          {
//              for(int g=f;g<i;g++)cout<<a[g];
//              cout<<endl;
//          }
int main()
{

    cin>>a;
    int x=a.length();
    for(int i=0;i<=x;i++){
        if(a[i]==',' || i==x){
//      cout << xz << " " << dz << " " << sz << " " << tz;
            if((xz>0 && dz>0 || xz>0 && sz>0 || dz>0 && sz>0) && tz>0){

                if(len>=6 && len<=12 && use){//长度适合 & 有效字符串 
                cout << b << endl;

                }
            }
            dz=0,xz=0,sz=0,tz=0;use = true;
                b="";len=0;
        }else{
            if(!use) continue;//若不是有效字符串直接跳过该字符 
            if(!r(i)){
                use = false;
            }b+=a[i];
            len++;
        }
    }
    return 0; 
}```

by Kobe_Bryan @ 2024-07-17 08:36:16

@Iron_grand

if(i-f>=7&&i-f<=13&&Sum==i-f&&xz+dz+sz>=2&&tz==1)

中的

xz+dz+sz>=2&&tz==1

就是判断大写字母,小写字母和数字必须至少有其中两种,以及至少有四个特殊字符中的一个。


by Iron_grand @ 2024-07-17 10:02:40

@Kobe_Bryan xz+dz+sz>=2这句是判断大写字母,小写字母和数字加起来是否大于2,应该改成((xz>0)+(dz>0)+(sz>0) >= 2)才行,AC代码已经留在上面了


by Kobe_Bryan @ 2024-07-17 10:05:18

@Iron_grand 你看我上面判断大小写的,是=1,不是++,说明符合条件的就=1,所以我下面这样写是可以的,我试过了


by Iron_grand @ 2024-07-17 10:07:23

@Kobe_Bryan ok,祝AC


|